如何使用Java流进行过滤
作者:互联网
我有一个包含3个变量的对象列表(id,version,root_id)
例如:{(1,3,1001),(2,2,1001),(3,1,1001),(4,1,1002),(5,1,1003)}
我只想保留1个具有相同root_id并具有最高版本号的对象.
输出:{(1,3,1001),(4,1,1002),(5,1,1003)}
如何在列表上应用Java流过滤器以获取所需的输出.
请帮忙.我对应用过滤器感到有些困惑.
解决方法:
您需要按rootId分组,并通过比较int值获取最大版本.
maxBy返回可选数据,以解开实际数据collectingAndThen
public static void main(String[] args) {
List<Data> objects = Arrays.asList(new Data(1, 3, 1001), new Data(2, 2, 1001), new Data(3, 1, 1001),
new Data(4, 1, 1002), new Data(5, 1, 1003));
Map<Integer, Data> filtered = objects.stream().collect(Collectors.groupingBy(Data::getRootId, Collectors
.collectingAndThen(Collectors.maxBy(Comparator.comparingInt(Data::getVersion)), Optional::get)));
System.out.println(filtered.values());
}
static class Data {
int id;
int version;
int rootId;
//getter,setter & constructors
//toString
}
输出
[Data [id=1, version=3, rootId=1001], Data [id=4, version=1, rootId=1002], Data [id=5, version=1, rootId=1003]]
标签:java-8,java-stream,java 来源: https://codeday.me/bug/20191118/2024813.html