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

3
我正在尝试使用Java 8将一个List转换为Map,但我一直卡在这一部分。我的目的是让map的值成为类型为U的某个变量的值。假设在这个示例中T是一个Person对象,U是一个String。
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>

有什么想法,这个问题可能是什么?

你是如何声明Map变量并将结果赋值给它的?能否请展示所有相关代码? - ernest_k
4
list.stream().collect(Collectors.toMap(x -> x, x-> "")) - Eran
1个回答

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());

如果像Sweeper建议的那样,您希望所有值都是"" - 那看起来您只想使用唯一键,这听起来像是一个Set<Person> - Nigel Nop
@NigelNop 可能是这样。但现在我想了想,OP可能希望使用没有意义的值来创建地图,因为他们之后想要填充地图。 - Sweeper
虽然听起来有些奇怪,但是 OP 无论如何都需要重新计算键来插入值。 - Nigel Nop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接