【发布时间】:2017-06-07 08:13:13
【问题描述】:
当在Collectors.toMap() 期间发现重复的键条目时,将调用合并函数(o1, o2)。
问题:如何获取导致重复的密钥?
String keyvalp = "test=one\ntest2=two\ntest2=three";
Pattern.compile("\n")
.splitAsStream(keyval)
.map(entry -> entry.split("="))
.collect(Collectors.toMap(
split -> split[0],
split -> split[1],
(o1, o2) -> {
//TODO how to access the key that caused the duplicate? o1 and o2 are the values only
//split[0]; //which is the key, cannot be accessed here
},
HashMap::new));
在合并函数中,我想根据 key 来决定是取消映射,还是继续使用这些值。
【问题讨论】:
-
你可以在之后过滤合并的值,合并时真的需要过滤它们吗?
-
你能举个例子吗?在合并期间,我必须决定取哪个值(o1 或 o2)。必须在 key 上做出决定。但关键并不总是出现两次。只有在某些情况下才必须决定合并。
-
好的,我明白了。您可以创建单独的 Map 并运行
.map(entry -> entry.split("=")).forEach()并检查每个条目是否已经在 Map 中。如果没有 - 添加,否则 - 检查决定是否替换。
标签: java java-8 collectors