转换列表<;T>;映射<;T、 U>;使用Java8

转换列表<;T>;映射<;T、 U>;使用Java8,java,java-8,java-stream,Java,Java 8,Java Stream,我正试图使用Java8将列表转换为映射,但我一直被这一部分卡住。我试图得到的是映射的值,它是某种类型U的变量。比如说,T是一个Person对象,U是一个字符串 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, ? e

我正试图使用Java8将
列表
转换为
映射
,但我一直被这一部分卡住。我试图得到的是映射的值,它是某种类型U的变量。比如说,
T
是一个
Person
对象,
U
是一个
字符串

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>

不存在类型变量T,U的实例,因此字符串符合函数映射是键值对的集合。您提到希望键是
Person
的实例,但是值呢?您希望这些值是什么

如果希望将这些值作为此人的姓名,则可以执行以下操作:

list.stream().collect(Collectors.toMap(x -> x, Person::getName));
如果您只是希望所有值都是
(但我认为这不是很有用),您仍然需要lambda:

list.stream().collect(Collectors.toMap(x -> x, x -> ""));
看起来您可能只需要一组唯一的值,在这种情况下,您可以使用
收集器。toSet

list.stream().collect(Collectors.toSet());
或者只是
不同的

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

如何声明要为其分配结果的映射变量?你能显示所有相关的代码吗?
list.stream().collect(Collectors.toMap(x->x,x->”)
如果你像Sweeper建议的那样,希望所有的值都是
——看起来你只想使用唯一的键,这听起来像是一个
集。但是现在我想起来了,OP可能想要一个带有无意义值的映射,因为他们想在之后填充映射。这听起来很奇怪-OP无论如何都需要重新计算键来插入值