nop*_*ens 0 java grouping java-stream
如何按一系列可能的值对列表进行分组?如果我有一个类 Foo
class Foo{
int value;
}
Run Code Online (Sandbox Code Playgroud)
和一个 foosList<Foo>列表然后
list.stream().collect(Collectors.groupingBy(Foo::getValue));
Run Code Online (Sandbox Code Playgroud)
将我的具有相同价值的 foos 收集到一组中。但我想将一系列值归为一组。例如
values < 5 in group "A"
values > 5 && < 25 in group "B"
values >= 25 in group "C"
Run Code Online (Sandbox Code Playgroud)
或者另一个例子:假设我有一个整数列表:
List<Integer> list = List.of(2,3,4,9,11,17,28,29,32);
list.stream().collect(Collectors.groupingBy(
classifier,
Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)
我试图把类似的东西放到分类器
i < 5 ? "A": i >= 5 && i < 25 ? "B" : "C";
Run Code Online (Sandbox Code Playgroud)
这给出了编译错误。怎么做?
而不是Foo::getValue,提供一个函数,给出它所属的组:
public class B {
public static String group(int integer) {
if (i < 5) {
return "A";
} else if (i < 25) {
return "B";
}
return "C";
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
list.stream().collect(Collectors.groupingBy(B::group));
Run Code Online (Sandbox Code Playgroud)