gpt4 book ai didi

java - 一元函数接口(interface)中的 HashMap 与 Java 8 中的 Lambda

转载 作者:行者123 更新时间:2023-11-29 07:26:57 25 4
gpt4 key购买 nike

我正在学习 Java 8 Lambda 和一元函数式接口(interface)。我有一个关于“函数”类的练习作业,使用 HashMap ,其中按以下步骤做:

  1. 创建类型为 Function<Set, Map> 的变量收到 Set并创建一个 HashMap使用 lambda 表达式

  2. 将词放入 map ,使用该词的大写第一个字母作为键

  3. 执行lambda表达式并查看结果

我尝试了以下方法,但它不起作用。我认为问题出在 lambda 表达式中,但我想了解我必须怎么做(为简单起见,我将同一个词作为键)。这样,结果为“null”。

import java.util.*;
import java.util.function.Function;

public class FunctionTest {

public static void main(String[] args) {
HashSet<String> hs = new HashSet<String>();
hs.add("ciao");
hs.add("hello");
hs.add("hallo");
hs.add("bonjour");

Function<Set, Map> setToMap = s2 -> (Map) new HashMap().put(s2,s2);

System.out.println(setToMap.apply(hs));
}
}

对于上面的例子,预期的结果应该是{B=bonjour, C=ciao, H=hello} .

最佳答案

我认为这意味着您必须添加所有 wordsSetMap遵循 2 条规则

  • 关键是首字母大写
  • 值是单词

Function<Set<String>, Map<Character, String>> setToMap = aSet -> {
Map<Character, String> map = new HashMap<>();
for (String s : aSet ) {
map.put(s.toUpperCase().charAt(0), s);
}
return map;
};
// or using Streams :
Function<Set<String>, Map<Character, String>> setToMap = aSet ->
aSet.stream().collect(Collectors.toMap(s -> s.toUpperCase().charAt(0),
Function.identity(),
(oldK, newK) -> oldK)); // merging function in cas of duplicate key

提示:不要使用原始类型,而是尽可能指定它们:

  • Function<Set,Map>变成 Function<Set<String>, Map<Character, String>>

关于java - 一元函数接口(interface)中的 HashMap 与 Java 8 中的 Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50395172/

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