Java:将List <List>转换为地图

Ora*_*cle 0 java dictionary java-stream

给定一个唯一值子列表的列表(也就是说,两个不同的子列表不能共享相同值的元素)-例如:

List[List[1, 1, 1], List[2], List[4, 4], List[7]]

如何将其转换为具有(值,大小)键值对的Map?

这将导致:

{
  1 : 3
  2 : 1
  4 : 2
  7 : 1
}
Run Code Online (Sandbox Code Playgroud)

将List定义为values,我假设人们可以使用流并这样收集Map:

values.stream().collect(Collectors.toMap(Integer::intValue, ? ));

当前不确定要为第二个参数输入什么,因为它需要a,value mapper但不允许.size()在任何子列表上调用。

rge*_*man 7

使用时Collectors.toMap,您需要指定如何从流的每个元素中获取键和值。 Integer::intValue在这里无法使用,因为您的流元素是列表,而不是整数。

对于键,获取列表的第一个元素。(这假定内部列表都是非空的。)对于该值,请传递size方法引用。

values.stream()
    .collect(Collectors.toMap(list -> list.get(0), List::size));
Run Code Online (Sandbox Code Playgroud)