gpt4 book ai didi

java - 如何使用 Java 流进行过滤

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:00 26 4
gpt4 key购买 nike

我有一个包含 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 流过滤器以获得所需的输出。请帮忙。我对应用过滤器有点困惑。

最佳答案

你需要group通过 rootId并采取 max version通过比较int值(value)。

maxBy返回 Optional数据,解包实际数据 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 - 如何使用 Java 流进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40396156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com