3 回答
TA贡献1784条经验 获得超2个赞
对于流,您可以map像这样使用:
int[] array = {-1, 8, 9};
array = Arrays.stream(array)
.map(i -> i - 7)
.toArray();
或者,如果您使用的是 List,则可以使用:
List<Integer> array = new ArrayList<>(Arrays.asList(-1, 8, 9));
array = array.stream()
.map(i -> i - 7)
.collect(Collectors.toList());
TA贡献1909条经验 获得超7个赞
虽然流可能看起来“新而酷”,但您应该记住实际发生的事情。
编码:
array = Arrays.stream(array)
.map(i -> i - 7)
.toArray();
实际上运行这样的东西(但更糟......):
int[] newArray = new int[array.length];
for (int i = 0; i < array.length; i++) {
newArray[i] = array[i]-7;
}
array = newArray;
所以你可以很容易地看到它与你自己的代码相比效率有多低。
并不是说它不起作用,但请记住。
如果它是一个数组列表,你可以使用 lst.set(i, lst.get(i) - 7),顺便说一句......
TA贡献1831条经验 获得超9个赞
流应该是无副作用的,因此流不是修改数组或列表内容的好选择。不过,类似的事情是可能的。
第ArrayList一个。我认为这是一个很好的方式(然后for循环也很好):
List<Integer> list = new ArrayList<>(List.of(11, 14, 9, 13));
list.replaceAll(e -> e - 7);
System.out.println(list);
[4, 7, 2, 6]
该replaceAll方法是在 Java 8 中引入的。
我不认为存在一个很好的int数组解决方案。你可能会这样做:
int[] array = { 11, 14, 9, 13 };
Arrays.setAll(array, ix -> array[ix] - 7);
System.out.println(Arrays.toString(array));
[4, 7, 2, 6]
我觉得阅读起来既不自然也不容易,我更喜欢for循环。
如果您碰巧有一个非 null 数组Integer,则可以通过Arrays.asList以下方式使用上述第一种方法:
Integer[] array = { 11, 14, 9, 13 };
Arrays.asList(array).replaceAll(e -> e - 7);
System.out.println(Arrays.toString(array));
[4, 7, 2, 6]
添加回答
举报