使用 lambda 表达式对偶数进行平方

问题描述 投票:0回答:5

我正在尝试获取一个数字列表,过滤掉偶数,然后对这些偶数进行平方,以便原始列表中的偶数进行平方。这是我的代码:

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));

尝试了其他一些事情,但这就是我目前所处的位置

java lambda java-8
5个回答
6
投票

您需要对结果执行一些操作,例如将其存储在数组中。另请注意,您不需要初始列表,可以直接从流开始:

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);

3
投票

另一种解决方案是映射结果并使用

List
:
 将它们收集到 
Collectors#toList

List<Long> results = nums2.stream()
    .filter(p -> p%2 == 0)
    .map(p -> p = (long)Math.pow(p, 2))
    .collect(Collectors.toList());

0
投票

通常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);
    }

0
投票

使用函数和谓词,您将轻松获得输出 列表 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]


0
投票

//使用映射偶数总和范围(1-100) 列表 EvenSquares = IntStream.range(0, 100).filter(number -> (number % 2 == 0)).boxed() .map(数字 -> 数字 * 数字).collect(Collectors.toList());

© www.soinside.com 2019 - 2024. All rights reserved.