我有一个代码场景,我将每个转换为流,但我不确定这是否是我遵循的正确方法
这是每个循环:
List<ClassA> list=getList(); //Contains object of type ClassA
int a=0; int b=0; int c=0;
for(ClassA a: list) {
String response=checkRespone(a.getId());
if(reponse.equals("x")) ++a;
else if(reponse.equals("y")) ++b;
else ++c;
}
Run Code Online (Sandbox Code Playgroud)
为了将其转换为流,我写了这个。有没有更好的方法来写这个?
AtomicInteger a = new AtomicInteger(0);
AtomicInteger b = new AtomicInteger(0);
AtomicInteger c = new AtomicInteger(0);
list.stream().forEach(ClassA->{if(checkRespone(a.getId()).equals("x")) {a.set(a.get()+1);} else if (checkRespone(a.getId()).equals("y")) {
b.set(b.get()+1);
} else {
c.set(c.get()+1);
}});
Run Code Online (Sandbox Code Playgroud)
如果您真的想在功能上执行此操作,则可以尝试使用grouping收集器。sum如果您倾向于使用初始列表的大小来查找变量的剩余计数,则可以进一步避免迭代值来查找它们c。
Map<String, Long> countingResponse = list.stream()
.map(clz -> checkRespone(clz.getId()))
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
int a = countingResponse.getOrDefault("x", 0L).intValue();
int b = countingResponse.getOrDefault("y", 0L).intValue();
int c = list.size() - (a + b);
Run Code Online (Sandbox Code Playgroud)