Java 使用if-else将每个转换为流

Java 使用if-else将每个转换为流,java,java-stream,Java,Java 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"))

我有一个代码场景,其中我正在将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;
}

如果您真的想在功能上执行此操作,可以尝试使用
分组
收集器。如果您倾向于使用初始列表的大小来查找变量
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);
Map countingResponse=list.stream()
.map(clz->checkRespone(clz.getId()))
.collect(Collectors.groupingBy(Function.identity()、Collectors.counting());
int a=countingResponse.getOrDefault(“x”,0L).intValue();
intb=countingResponse.getOrDefault(“y”,0L).intValue();
int c=list.size()-(a+b);

我不会为此使用流,我会保留您当前的代码。@TimBiegeleisen为什么不使用stream?我认为您应该在这三个条件中的每一个条件上使用filter on stream,然后映射以增加过滤列表中的每个元素。当您在功能上使用Streams以无状态方式处理和生成结果而不产生副作用时,Streams非常好。将
for
切换到
forEach()
是毫无意义的。语法更难看,它仍然是有状态的和不可辩驳的。没有意义。如果我需要为每个
X
Y
运行不同的方法,前提是我的地图中有
X
Y
,那么应该采用什么方法??显然
getOrDefault
computeIfAbsent
不起作用;else如果(response.equals(“y”)SomeMethodB();其他方法c()@VishwaRatna如果怀疑查找是否不区分大小写,则
分组
方法可以对键执行小写而不是
标识
。不过,这个问题并没有多少暗示。
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);