我有一个数组,例如,我想从数组的所有元素中减去7。除了以下逻辑,我该怎么做。
[87]
任何与之相关的信息流都会有所帮助。
编辑-不必是数组。也可以是ArrayList。
答案 0 :(得分:7)
对于流,您可以像这样使用map
:
int[] array = {-1, 8, 9};
array = Arrays.stream(array)
.map(i -> i - 7)
.toArray();
或者如果您使用列表,则可以使用:
List<Integer> array = new ArrayList<>(Arrays.asList(-1, 8, 9));
array = array.stream()
.map(i -> i - 7)
.collect(Collectors.toList());
答案 1 :(得分:3)
虽然流似乎是“新奇的”,但您应该记住实际发生的情况。
代码:
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;
因此您可以轻松地看到它与您自己的代码相比效率低下。
并不是说它不起作用,但请记住。
答案 2 :(得分:3)
流应该是无副作用的,因此,流不是修改数组或列表内容的好选择。不过,类似的事情也是可能的。
首先 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]