gpt4 book ai didi

java - 重构 Java 8 流代码

转载 作者:行者123 更新时间:2023-12-02 17:44:11 29 4
gpt4 key购买 nike

我使用 Java 8 实现了以下代码。

Map<String, String> coMap = getHashMap();

String newCoName = coMap.entrySet()
.stream()
.filter(coEntry -> coEntry.getValue().equals(newcoId))
.map(coEntry -> coEntry.getKey())
.collect(Collectors.joining());


String oldCoName = coMap.entrySet()
.stream()
.filter(coEntry -> coEntry.getValue().equals(oldcoId))
.map(coEntry -> coEntry.getKey())
.collect(Collectors.joining());
现在。我想知道有什么更好的方法来做到这一点,而不是重复相同的代码行两次。

最佳答案

比重复相同的代码两次更大的问题是执行相同的代码两次。

运行单个 Stream 管道来生成输出会更有效:

Map<String,String> keysByValue =
coMap.entrySet()
.stream()
.collect(Collectors.groupingBy(Map.Entry::getValue,
Collectors.mapping(Map.Entry::getKey,
Collectors.joining())));

这将为您提供原始 Map 的每个值(不仅是原始代码正在搜索的两个值),以及具有该值的联合键。

然后您可以从Map中提取您需要的数据:

String newCoName = keysByValue.get(newcoId);
String oldCoName = keysByValue.get(oldcoId);

输入和输出示例:

Map<String,String> coMap = new HashMap<> ();
coMap.put("a","foo");
coMap.put("b","foo");
coMap.put("c","bar");
coMap.put("d","bar");
Map<String,String> keysByValue = ... // same as the code above
String newValueKeys = keysByValue.get("foo");
String oldValueKeys = keysByValue.get("bar");
System.out.println (newValueKeys);
System.out.println (oldValueKeys);

输出:

ab
cd

关于java - 重构 Java 8 流代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41279574/

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