Java 使用lambda表达式对偶数求平方
我试图得到一个数字列表,过滤掉偶数,然后将这些偶数平方,这样原始列表中的偶数就是平方。这是我的密码:Java 使用lambda表达式对偶数求平方,java,lambda,java-8,Java,Lambda,Java 8,我试图得到一个数字列表,过滤掉偶数,然后将这些偶数平方,这样原始列表中的偶数就是平方。这是我的密码: 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)); A
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));
ArrayList nums2=new ArrayList();
对于(长i=0;i<100000;i++)
nums2.添加(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);
另一种解决方案是映射结果并使用
收集器#toList
将其收集到列表中:
List<Long> results = nums2.stream()
.filter(p -> p%2 == 0)
.map(p -> p = (long)Math.pow(p, 2))
.collect(Collectors.toList());
List results=nums2.stream()
.filter(p->p%2==0)
.map(p->p=(long)Math.pow(p,2))
.collect(Collectors.toList());
通常使用java 8 lambda作为函数,没有副作用
(不改变原来的清单),因此我建议你
当您希望进行就地更改时,请使用经典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);
}
ArrayList nums2=new ArrayList();
对于(长i=0;i<100000;++i){
nums2.添加(i);
}
长偶数=0;
对于(int n=0;n)您的逻辑似乎很好。现在您需要在另一个集合中检索结果。尝试使其效果相同collection@LuiggiMendoza只是好奇,会p->p=(long)Math.pow(p,2)
没有效果,因为变量引用将通过值传递,所以重新分配不会产生效果?我对流没有太多经验,所以我很可能在这方面是错误的。我想象lambda大致相当于void method(Long p){p=(Long)Math.pow(p,2);}
。是这样吗?@user3580294我只是说逻辑似乎很好。我从来没有说过任何关于方法的事情。无论如何,在这里回顾:(在测试之前无法提供答案)。@luigimendoza抱歉,我想你可能知道。你可以删除“p=”。