Map<Object, List<MasterView>> result =
navList.stream().collect(Collectors.groupingBy(navData->
new ArrayList<String>(Arrays.asList(navData.getCode(),navData.getCurrency()))));
从这个我得到组。
之后如何进行?
您可以将colltingandthen作为第二个参数添加到您的groupingBy,它将对最终列表执行额外的整理转换。
Collector<MasterView, Object, List<MasterView>> top2 = Collectors.collectingAndThen(Collectors.toList(), it -> it.stream().limit(2).collect(Collectors.toList()));
Map<Object, List<MasterView>> result =
navList.stream().collect(Collectors.groupingBy(navData->
new ArrayList<String>(Arrays.asList(navData.getCode(),navData.getCurrency())), top2));
看看这是否对你有帮助。
List navList = new ArrayList<>();
navList.add(new MasterView(195, 21));
navList.add(new MasterView(115, 30));
navList.add(new MasterView(115, 34));
navList.add(new MasterView(145, 58));
navList.add(new MasterView(145, 28));
navList.add(new MasterView(155, 26));
navList.add(new MasterView(155, 27));
navList.add(new MasterView(177, 22));
navList.add(new MasterView(177, 20));
navList.add(new MasterView(177, 10));
navList.add(new MasterView(177, 12));
Map<Integer, List<MasterView>> result =
navList.stream().collect(Collectors.groupingBy(MasterView::getCode));
Map<Integer, List<MasterView>> top2Map = new HashMap<>();
for (Map.Entry<Integer, List<MasterView>> entry : result.entrySet()) {
List<MasterView> masterViews = entry.getValue();
if (masterViews.size() > 2)
masterViews.sort(Collections.reverseOrder());
else if (masterViews.size() == 1)
top2Map.put(entry.getKey(), Arrays.asList(entry.getValue().get(0)));
else
top2Map.put(entry.getKey(), Arrays.asList(entry.getValue().get(0), entry.getValue().get(1)));
}
如果你想对一个自定义对象使用Collections.sort()方法,你需要准备它:
class MasterView implements Comparable<MasterView> {
private Integer code;
private Integer currency;
public MasterView(int code, int currency) {
this.code = code;
this.currency = currency;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public Integer getCurrency() {
return currency;
}
public void setCurrency(Integer currency) {
this.currency = currency;
}
@Override
public int compareTo(MasterView o) {
return this.getCurrency().compareTo(o.getCurrency());
}
}