编程语言
首页 > 编程语言> > 如何使用Java流进行过滤

如何使用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