gpt4 book ai didi

java - 在 Java Stream 中减少 If

转载 作者:行者123 更新时间:2023-12-01 22:04:26 25 4
gpt4 key购买 nike

如何仅在谓词为真时才应用 reduce 操作?

例如:

        Stream.of("foo=X","bar=Y","foo=Z")
.reduce((arg1, arg2)-> arg1.contains(arg2) ? arg1 : <reduceNothing>)
.collect(Collectors.toList());

我想去掉 "foo=..." 中的一个,在末尾有一个 "foo=X","bar=Y"

最佳答案

如果发现重复项,只需使用将获得第一个(按遇到顺序)结果的合并:

Collection<String> result = Stream.of("foo=X", "bar=Y", "foo=Z", "bar=M", "test=12")
.collect(Collectors.toMap(
x -> x.split("=")[0],
Function.identity(),
(left, right) -> left,
LinkedHashMap::new))
.values();

System.out.println(result); // [foo=X, bar=Y, test=12]

如果您需要保留初始顺序,我使用了 LinkedHashMap,如果不需要,只需使用:

 Collection<String> result = Stream.of("foo=X", "bar=Y", "foo=Z", "bar=M", "test=12")
.collect(Collectors.toMap(
x -> x.split("=")[0],
Function.identity(),
(left, right) -> left))
.values();

System.out.println(result); // [bar=Y, test=12, foo=X]

关于java - 在 Java Stream 中减少 If,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52623977/

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