class Foo { private int variableCount; public Foo(int vars) { this.variableCount = vars; } public Integer getVariableCount() { return variableCount; } }
1、实现accumulator object用于给Collector提供函数
/**
* Accumulator object to hold the current min
* and the list of Foos that are the min.
*/
class Accumulator {
Integer min;
List<Foo> foos;
Accumulator() {
min = Integer.MAX_VALUE;
foos = new ArrayList<>();
}
void accumulate(Foo f) {
if (f.getVariableCount() != null) {
if (f.getVariableCount() < min) {
min = f.getVariableCount();
foos.clear();
foos.add(f);
} else if (f.getVariableCount() == min) {
foos.add(f);
}
}
}
Accumulator combine(Accumulator other) {
if (min < other.min) {
return this;
}
else if (min > other.min) {
return other;
}
else {
foos.addAll(other.foos);
return this;
}
}
List<Foo> getFoos() { return foos; }
}
2、调用方法和测试
1)示例List<Foo>
List<Foo> foos = Arrays.asList(new Foo(3), new Foo(3), new Foo(2), new Foo(1), new Foo(1), new Foo(4));
2)调用方法
List<Foo> mins = foos.stream().collect(Collector.of( Accumulator::new, Accumulator::accumulate, Accumulator::combine, Accumulator::getFoos ) );
输出结果:
[Foo{1}, Foo{1}]
3、使用stream() min实现
import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Optional; public class Main { public static void main(String[] args) { List<Person> people = Arrays.asList( new Person("Alice", 30), new Person("Bob", 25), new Person("Charlie", 35) ); // 使用 stream() 找到年龄最小的 Person Optional<Person> youngestPerson = people.stream() .min(Comparator.comparingInt(Person::getAge)); // 输出结果 youngestPerson.ifPresent(System.out::println); } } class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public int getAge() { return age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } }