我的方法得到一个数字,该数字包含在[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);
}
但是此解决方案需要很多行
答案 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));
受益于短路。