我正在尝试获取一个数字列表,过滤掉偶数,然后对这些偶数进行平方,以便原始列表中的偶数进行平方。这是我的代码:
ArrayList<Long> nums2 = new ArrayList<Long>();
for(long i = 0; i < 100000; i++)
nums2.add(i);
nums2.stream().filter(p -> p%2 == 0).forEach(p -> p = (long)Math.pow(p, 2));
尝试了其他一些事情,但这就是我目前所处的位置
您需要对结果执行一些操作,例如将其存储在数组中。另请注意,您不需要初始列表,可以直接从流开始:
long[] result = IntStream.range(0, 100000) //instead of your initial list
.filter(p -> p % 2 == 0) //filters
.mapToLong(p -> (long) Math.pow(p, 2)) //"replaces" each number with its square
.toArray(); //collect the results in an array
或者您可以决定打印结果:
IntStream.range(0, 100000)
.filter(p -> p % 2 == 0)
.mapToLong(p -> (long) Math.pow(p, 2))
.forEach(System.out::println);
另一种解决方案是映射结果并使用
List
:将它们收集到
Collectors#toList
中
List<Long> results = nums2.stream()
.filter(p -> p%2 == 0)
.map(p -> p = (long)Math.pow(p, 2))
.collect(Collectors.toList());
通常java 8 lambdas被用作没有副作用的函数 (不改变原来的列表),因此我建议你只是 当您想要进行就地更改时,请使用经典的 for 循环:
ArrayList<Long> nums2 = new ArrayList<Long>();
for(long i = 0; i < 100000; ++i){
nums2.add(i);
}
long even=0;
for(int n=0;n<nums2.size();++n){
if((even=nums2.get(n))%2==0)
nums2.set(n, even*even);
}
使用函数和谓词,您将轻松获得输出 列表 ls = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9,-12);
List<Double> collect3 = ls.stream().filter(ele ->ele%2==0).map(ele -> Math.pow(ele, 2)).collect(Collectors.toList());
System.out.println("Square of even elements =" + collect3);
O/p- 偶数元素的平方 =[4.0, 16.0, 36.0, 64.0, 144.0]
//使用映射偶数总和范围(1-100) 列表 EvenSquares = IntStream.range(0, 100).filter(number -> (number % 2 == 0)).boxed() .map(数字 -> 数字 * 数字).collect(Collectors.toList());