gpt4 book ai didi

java - LinkedList 的复杂流逻辑

转载 作者:搜寻专家 更新时间:2023-11-01 03:15:57 26 4
gpt4 key购买 nike

我正在处理一些我无法正确处理的复杂逻辑。我试图将包含属性列表的列表缩减为一个合并的对象,删除重复的

假设我有一个 Config具有以下元素的类:

private int index;
private String name;
private Map<String, String> properties;

这个对象将在一个对象链表中,List<Config> .如果Config索引 5 处的对象在 properties 中有一个键/值“version=2”,但 Config索引 1 处的对象具有 properties包含“version=1”,我需要索引 5 中的属性才能获胜。所以我想要一个 final Config (稍后我会担心 name 元素)具有反射(reflect)流中最新属性的合并属性。

我是否在一次手术中要求太多?到目前为止,我已经想出了这样的东西,但它没有编译:

configList.stream()
.map(it -> it.getProperties())
.collect(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(???))))

感谢任何帮助!

最佳答案

如果我理解正确的话,你想获取所有属性并将它们合并到一个 Map 中,如果有重复,你想优先考虑配置中索引值最高的 map 属性。

这是我想出的解决方案。

Map<String, String> properties = configList.stream()
.sorted(Comparator.comparingInt(Config::getIndex)) //Sort the configs in ascending order by indexes.
.flatMap(config -> config.properties.entrySet().stream()) //flat map all the properties
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (left, right) -> right)); //collect to a map

这个 Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (left, right) -> right) 是魔法发生的地方。

由于我们已经按索引对配置进行了排序,因此我们始终将具有较高配置索引的值放在底部,我们所做的只是在出现重复键时覆盖现有键。

关于java - LinkedList 的复杂流逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52616491/

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