转换列表<;T>;映射<;T、 U>;使用Java8
我正试图使用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
列表
转换为映射
,但我一直被这一部分卡住。我试图得到的是映射的值,它是某种类型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无论如何都需要重新计算键来插入值