gpt4 book ai didi

java - 将每个转换为 if else 流式传输

转载 作者:行者123 更新时间:2023-12-01 14:10:21 27 4
gpt4 key购买 nike

我有一个代码场景,我正在将 for each 转换为 stream ,但我不确定这是否是我遵循的正确方法

这是 for each 循环:

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

为了将它转换成流,我写了这个。有更好的写法吗?

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

最佳答案

如果您真的想在功能上执行此操作,您可以尝试使用grouping 收集器。如果您倾向于使用初始列表的大小来查找变量 c 的剩余计数,则可以进一步避免迭代这些值来查找它们的 sum

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

关于java - 将每个转换为 if else 流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62034567/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com