java - Java 收集器的问题
问题描述
我正在着手使用 lambda(是的,为时已晚)。我正在尝试将 String 列表转换为 HashMap ,键是 toString() 返回的值,值是原始 String 对象。
List<String> metas = new ArrayList<String>();
metas.stream().collect(Collectors.toMap(String::toString), Function.identity());
我收到“类型 String 未定义适用于此处的 toString(T)”。Collectors.toMap() 的参考文档还调用了一个没有任何参数的方法,如下所示 https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html#toMap-java .util.function.Function-java.util.function.Function-
那么为什么我的程序说它没有定义 toString(T)?
解决方案
寻找这样的东西?
public static void main(String... args) {
List<String> list = new ArrayList<>(Arrays.asList("12absc", "2bbds", "abc"));
Map<String, String> stringStringMap = list.stream()
.collect(Collectors.toMap(s -> s, s -> s));
System.out.println(stringStringMap);
}
输出:
{abc=abc, 12absc=12absc, 2bbds=2bbds}
为避免重复键问题,您还可以添加合并功能:
list.add("12absc");
stringStringMap = list.stream()
.collect(Collectors.toMap(s -> s, s -> s, (oldValue, newValue) -> oldValue));
System.out.println(stringStringMap);
输出将是相同的:
{abc=abc, 12absc=12absc, 2bbds=2bbds}
推荐阅读
- jenkins - Siebel 增量编译 - Jenkins 的自动化可行性
- javascript - 使用 vue.js 在切换另一个 div 高度时匹配 div 高度
- git - 导入主要包含 Git 文件夹的项目(如何打开)
- c# - XML反序列化如何遍历到第三个孩子
- maven - Maven 中的 project.basedir 问题,未提及 jar
- vb.net - OOP 新手 - 使用 List(of T) 或 Collection()
- java - Java正则表达式提取方括号或圆括号内的内容
- keras - 关于 keras , hyperas 中的自定义损失
- .net - 应用程序/项目名称是否有系统变量?
- javascript - Javascript Array - 我尝试了很多但没有正确得到答案