首页 > 解决方案 > 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)?

标签: javalambda

解决方案


寻找这样的东西?

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}

推荐阅读