0
Map<String, String> characterMap = new HashMap<>();
characterMap.put("Manikanta", "Pretty");
characterMap.put("Amulya", "VeryGood");
characterMap.put("Saroja", "Good");
characterMap.put("Vinitha", "Cool");
characterMap.put("Sravani", "Good");
characterMap.put("Sameera", "Good");

/*String key = characterMap.entrySet().stream().filter(entry -> entry.getValue().equalsIgnoreCase("Good")).map(Map.Entry::getKey).findFirst().orElse(null);*/

Map<String, String> comboMap = new HashMap<>();
String newKey = null;
String val1 = null;
String val2 = null;
for (Map.Entry<String, String> entry : characterMap.entrySet()) {
    if (entry.getKey().equalsIgnoreCase("Manikanta"))
        newKey = entry.getKey();

    if (entry.getKey().equalsIgnoreCase("Amulya"))
        val1 = entry.getValue();

    if (entry.getKey().equalsIgnoreCase("Vinitha"))
        val2 = entry.getValue();
}

comboMap.put(newKey, val1 + "_" + val2);

如何在 lambda 表达式中实现这一点?真的可以像上面的代码那样插入现有的地图数据来自定义添加新的地图吗?

4

2 回答 2

1

你不能。

您正在尝试将具有 6 个元素的地图简化为其中包含单个元素的地图(如果这是一个示例,并且生成的地图将永远包含任何内容,但只有 1 个值键 "Manikanta" -> " VeryGood_Cool”,您将需要更新您的示例)。

流(我猜这就是您所说的“在 lambda 表达式中”的意思)擅长对流中的单个元素进行操作(例如,概念“Saroja”->“Good”),或者如何将整个流到不同的集合(例如:将整个事物变成键列表)。

你可以编写一个自定义收集器;它不会比这段代码短,而且更难阅读。因此,我没有看到展示这一点的意义。

于 2020-09-14T11:55:29.533 回答
0

由于您只检查键值,因此您甚至不需要 for 循环:

comboMap.put(characterMap.containsKey("Manikanta")?"Manikanta":null,
             characterMap.get("Amulya")+ "_" + characterMap.get("Vinitha"));
于 2020-09-15T08:50:59.020 回答