Как возвратить 2 значения из метода Java?

Если вы хотите отобразить описание только для наибольшего алфавитного типа каждого тега, и вы используете 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;
167
задан Michael 4 October 2016 в 14:06
поделиться

6 ответов

Вместо того чтобы возвращать массив, содержащий два значения, или использовать общий класс 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());
}
222
ответ дан 23 November 2019 в 20:59
поделиться

и это - то, как Вы делаете это в JS: return { objA, valueB }. Я знаю, что это - offtopic, но я не могу воздержаться от отъезда этого комментария после наблюдения, как совершенно новый класс должен быть реализован в Java. JavaScript - прекращают тратить впустую Вашу жизнь и начинают Писать сценарий!

-2
ответ дан 23 November 2019 в 20:59
поделиться

В 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;
    }
}
26
ответ дан 23 November 2019 в 20:59
поделиться

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]);
}
67
ответ дан 23 November 2019 в 20:59
поделиться

вы должны использовать коллекции, чтобы возвращать более одного возвращаемого значения

в вашем случае вы пишете код как

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();
    }
5
ответ дан 23 November 2019 в 20:59
поделиться

Вы можете реализовать общую 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();
39
ответ дан 23 November 2019 в 20:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: