Если вы хотите отобразить описание только для наибольшего алфавитного типа каждого тега, и вы используете MySQL 8+, то мы можем попробовать использовать ROW_NUMBER
:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Tag ORDER BY Type DESC) rn
FROM yourTable
)
SELECT
CASE WHEN rn = 1 THEN Tag END AS Tag,
CASE WHEN rn = 1 THEN Description END AS Description,
Type
FROM cte
ORDER BY
CASE WHEN Tag IS NOT NULL THEN 0 ELSE 1 END,
Tag,
rn;
Вместо того чтобы возвращать массив, содержащий два значения, или использовать общий класс Pair
, подумайте о создании класса, представляющего результат, который вы хотите вернуть, и возвращайте экземпляр этого класса. Дайте классу осмысленное имя. Преимуществом такого подхода по сравнению с использованием массива является безопасность типов, а также то, что ваша программа будет намного проще для понимания.
Примечание: общий класс Pair
, предложенный в некоторых других ответах здесь, также обеспечивает безопасность типов, но не передает, что представляет собой результат.
Пример (в котором не используются действительно значимые имена):
final class MyResult {
private final int first;
private final int second;
public MyResult(int first, int second) {
this.first = first;
this.second = second;
}
public int getFirst() {
return first;
}
public int getSecond() {
return second;
}
}
// ...
public static MyResult something() {
int number1 = 1;
int number2 = 2;
return new MyResult(number1, number2);
}
public static void main(String[] args) {
MyResult result = something();
System.out.println(result.getFirst() + result.getSecond());
}
и это - то, как Вы делаете это в JS: return { objA, valueB }
. Я знаю, что это - offtopic, но я не могу воздержаться от отъезда этого комментария после наблюдения, как совершенно новый класс должен быть реализован в Java. JavaScript - прекращают тратить впустую Вашу жизнь и начинают Писать сценарий!
В Java можно вернуть только одно значение, поэтому самый простой способ выглядит так:
return new Pair<Integer>(number1, number2);
Вот обновленная версия вашего кода:
public class Scratch
{
// Function code
public static Pair<Integer> something() {
int number1 = 1;
int number2 = 2;
return new Pair<Integer>(number1, number2);
}
// Main class code
public static void main(String[] args) {
Pair<Integer> pair = something();
System.out.println(pair.first() + pair.second());
}
}
class Pair<T> {
private final T m_first;
private final T m_second;
public Pair(T first, T second) {
m_first = first;
m_second = second;
}
public T first() {
return m_first;
}
public T second() {
return m_second;
}
}
Java не поддерживает возврат нескольких значений. Верните массив значений.
// Function code
public static int[] something(){
int number1 = 1;
int number2 = 2;
return new int[] {number1, number2};
}
// Main class code
public static void main(String[] args) {
int result[] = something();
System.out.println(result[0] + result[1]);
}
вы должны использовать коллекции, чтобы возвращать более одного возвращаемого значения
в вашем случае вы пишете код как
public static List something(){
List<Integer> list = new ArrayList<Integer>();
int number1 = 1;
int number2 = 2;
list.add(number1);
list.add(number2);
return list;
}
// Main class code
public static void main(String[] args) {
something();
List<Integer> numList = something();
}
Вы можете реализовать общую Pair
, если уверены, что вам просто нужно вернуть два значения:
public class Pair<U, V> {
/**
* The first element of this <code>Pair</code>
*/
private U first;
/**
* The second element of this <code>Pair</code>
*/
private V second;
/**
* Constructs a new <code>Pair</code> with the given values.
*
* @param first the first element
* @param second the second element
*/
public Pair(U first, V second) {
this.first = first;
this.second = second;
}
//getter for first and second
, а затем получить метод, возвращающий эту Pair
:
public Pair<Object, Object> getSomePair();