Java 流 groupingBy 条件

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)

这给出了编译错误。怎么做?

Nic*_*uet 5

而不是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)