如何以最优雅的方式输出未知数

时间:2018-11-17 22:31:30

标签: java

我的方法得到一个数字,该数字包含在[0,1,2]中。我正在寻找最优雅,最直接的方法来从此阵列中获得另外两个。现在,我想到了:

method(int number){
    int firstNumber = number;
    int secondNumber;
    int thirdNumber;
    List<Integer> rows = new ArrayList<>();
    rows.add(0);
    rows.add(1);
    rows.add(2);
    rows.remove(Integer.valueOf(number));
    secondNumber = rows.remove(0);
    thirdNumber = rows.remove(0);
}

但是此解决方案需要很多行

3 个答案:

答案 0 :(得分:2)

流。

public static List<Integer> method(int i) {
    return Stream.of(0, 1, 2).filter(j -> j != i).collect(Collectors.toList());
}

为了详细说明,由于如果您不知道流在做什么,则流可能相当不可读,因此Stream.of()会在其中创建一个具有硬编码值的流,尽管它实际上接受了varargs,所以您可以发送实际的数组。如果有列表,则可以使用List.stream()。

.filter()接受一个应返回布尔值的函数。如果返回false,则该特定值将保留在流中并传递到下一个阶段;如果返回true,则将其过滤掉(删除)。

尽管可以使用Collectors.toSet()来获取Set或编写自己的自定义方法,但

.collect()将流并 collects 的值放入List中,在这种情况下,做任何你想要的东西。

答案 1 :(得分:1)

使用模来查找其他人:

public static void method(int number){
    int secondNumber = (number + 1) % 3;
    int thirdNumber = (number + 2) % 3;
    System.out.println(secondNumber);
    System.out.println(thirdNumber);
}

答案 2 :(得分:1)

另一个变种是:

List<Integer> source = new ArrayList<>(Arrays.asList(0,1,2));
source.removeIf(x -> x == number);
System.out.println(source);

但最好这样做:

List<Integer> source = new ArrayList<>(Arrays.asList(0,1,2));
source.remove(Integer.valueOf(number)); 

受益于短路。