java - 使用 Java 8 将 List<T> 转换为 Map<T, U>

标签 java java-8 java-stream

我正在尝试转换 List<T>Map<T, U>使用 Java 8 但我一直卡在这一部分。我想要的是 map 的值是 U 类型的某个变量。让我们说这个例子 TPerson对象和 UString .

list.stream().collect(Collectors.toMap(x -> x, ""));

但是,我在 x -> x 下不断收到以下错误:

no instance of type variable T,U exists so that String conforms to Function<? super T, ? extends U>

关于问题可能是什么的任何想法?

最佳答案

映射是键值对的集合。您提到您希望键是 Person 的实例,但是值呢?您希望这些值是什么?

如果你想让值是这个人的名字,那么你可以这样做:

list.stream().collect(Collectors.toMap(x -> x, Person::getName));

如果您只是希望所有的值都是 ""(不过我认为这不是很有用),您仍然需要一个 lambda:

list.stream().collect(Collectors.toMap(x -> x, x -> ""));

看起来您可能只想要一堆唯一值,在这种情况下您可以使用 Collectors.toSet:

list.stream().collect(Collectors.toSet());

或者只是distinct:

list.stream().distinct().collect(Collectors.toList());

关于java - 使用 Java 8 将 List<T> 转换为 Map<T, U>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52510884/

相关文章:

java-8 - 在 Java 8 中创建循环和无限范围整数的最惯用方法

java - 如果在 Java 8 中流之前集合为 null,如何返回 false?

java - 使用 Collection 框架计算值(value)的百分比

java - 数据未使用 SSL 在客户端和服务器之间传输

java 8 ZonedDateTime 不打印 EST 当前时间。我在这里做错了什么

java - 为什么我收到 JsonSyntaxException : Expected BEGIN_ARRAY but was STRING here?

java - 使用普通 JAVA Stream 收集 int 数组的值

java - Lightweight-Stream-API 中按降序排序

java - 通知时获取非法监视器状态异常

java - java中带注释的简单servlet(图像文件夹)