使用Java 8将List <t>转换为Map <t,u =“”>

时间:2018-09-26 05:58:24

标签: java java-8 java-stream

我正在尝试使用Java 8将List<T>转换为Map<T, U>,但是我一直都停留在这一部分。我想拥有的映射值是一些类型为U的变量。对于本示例,假设TPerson对象,而U是{{ 1}}。

String

但是,我在list.stream().collect(Collectors.toMap(x -> x, "")); 下不断收到以下错误消息:

x -> x

有什么想法可以解决这个问题?

1 个答案:

答案 0 :(得分:7)

映射是键值对的集合。您提到您希望键为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());