我正在尝试使用Java 8将List<T>
转换为Map<T, U>
,但是我一直都停留在这一部分。我想拥有的映射值是一些类型为U的变量。对于本示例,假设T
是Person
对象,而U
是{{ 1}}。
String
但是,我在list.stream().collect(Collectors.toMap(x -> x, ""));
下不断收到以下错误消息:
x -> x
有什么想法可以解决这个问题?
答案 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());