我是Java 8流的新手,我无法从嵌套循环操作总和中获得正确的输出。
在嵌套循环中,我正在调用一个返回整数的方法;通过这样做最后总结得出的总和
这就是我的尝试:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
public class NestedLoop {
public void callTask(int i, int j) {
System.out.println("i:"+i+"j:"+j);
}
public int getCount(Count count, String j) {
if(count.getCount() >= 123 && count.getCount() <= 125) {
System.out.println("###");
return 1;
}
else {
return 0;
}
}
public static void main(String[] args) {
List<Count> list2 = new ArrayList<>();
List<String> list1 = new ArrayList<>();
Count count = new Count(121);
Count count1 = new Count(122);
Count count2 = new Count(123);
Count count3 = new Count(124);
Count count4 = new Count(125);
list2.add(count4);
list2.add(count2);
list2.add(count3);
list2.add(count1);
list2.add(count);
NestedLoop loop = new NestedLoop();
list1.add("list2 - Op1");
list1.add("list2 - Op2");
list1.add("list2 - Op2");
list1.add("list2 - Op2");
int _count = 0;
IntStream res = list2.parallelStream().flatMapToInt(x -> IntStream.of(list1.stream().mapToInt(y-> loop.getCount(x,y)).sum()));
System.out.println(res.sum());
}
}
Count class
class Count {
private int count;
public Count(int count) {
super();
this.count = count;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
通过这个,我得到12而不是2。
帮助,我代码有问题。
答案 0 :(得分:1)
请先干掉代码并先看看,因为12是正确的答案。对于list2
中的每个元素,您迭代list1
,然后调用getCount
,对值进行求和。对于值123,它被称为4次,相同的是124和125.每次返回1,将它们相加所有1 * 3 * 4得到12.为什么你需要2?理由是什么?
无论如何,这是你要求的吗?根据您的if
声明,这仍然会产生3。
int sum = list2.stream()
.mapToInt(x -> list1.stream().map(y -> loop.getCount(x, y)).findAny().orElse(0))
.sum();
但是,现有的产生12的解决方案可以进一步简化,
int sum = list2.stream()
.flatMapToInt(x -> list1.stream().mapToInt(y -> loop.getCount(x, y)))
.sum();