下面是使用最多的方法,通过
public class Test4 {
public static void main(String[] args) {
List<Pojo> pojoList = new ArrayList<>();
pojoList.add(new Pojo("A", 20.00d));
pojoList.add(new Pojo("A", 10.00d));
pojoList.add(new Pojo("B", 23.00d));
pojoList.add(new Pojo("A", 11.00d));
pojoList.add(new Pojo("C", 38.00d));
pojoList.add(new Pojo("B", 233.00d));
Map<String, Optional<Pojo>> map = pojoList.stream()
.collect(Collectors.groupingBy(Pojo::getType, Collectors.maxBy(Comparator.comparing(Pojo::getMoney))));
List<Pojo> pojos = map.values().stream().map(Optional::get).collect(Collectors.toList());
System.out.println(pojos);
}
static class Pojo {
public String type;
public double money;
public Pojo(String type, double money) {
this.type = type;
this.money = money;
}
public double getMoney() {
return money;
}
public String getType() {
return type;
}
@Override
public String toString() {
return "Pojo [type=" + type + ", money=" + money + "]";
}
}
}
输出
[Pojo [type=A, money=20.0], Pojo [type=B, money=233.0], Pojo [type=C, money=38.0]]
UPDATE
还有就是Collectors.collectingAndThen
可以用来对结果应用功能,以获得通过Optional
进口
import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.maxBy;
包裹collectingAndThen
Map<String, Pojo> result = pojoList.stream()
.collect(groupingBy(Pojo::getType, collectingAndThen(maxBy(comparing(Pojo::getMoney)), Optional::get)));
输出
{A=Pojo [type=A, money=20.0], B=Pojo [type=B, money=233.0], C=Pojo [type=C, money=38.0]}
值