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

SnG*_*SnG 3 java java-8 java-stream

我正在尝试将a转换List<T>Map<T, U>使用Java 8,但我一直陷入这一部分.我想要的是地图的值是U类型的某个变量.让我们说这个例子T是一个Person对象并且U是一个String.

list.stream().collect(Collectors.toMap(x -> x, ""));
Run Code Online (Sandbox Code Playgroud)

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

no instance of type variable T,U exists so that String conforms to Function<? super T, ? extends U>
Run Code Online (Sandbox Code Playgroud)

关于问题的任何想法?

Swe*_*per 7

地图是键值对的集合.您提到您希望密钥是实例Person,但值是什么?你想要的价值是什么?

如果您希望值是人名,那么您可以:

list.stream().collect(Collectors.toMap(x -> x, Person::getName));
Run Code Online (Sandbox Code Playgroud)

如果你只是想要所有的值""(我不认为这是非常有用的),你仍然需要一个lambda:

list.stream().collect(Collectors.toMap(x -> x, x -> ""));
Run Code Online (Sandbox Code Playgroud)

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

list.stream().collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

或者只是distinct:

list.stream().distinct().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)