我有一个id列表
List<Integer> ids = new ArrayList(){1,2,3};
我需要把它转换成下一个结构的Map:Map<Integer, Map<String, String>>,其中键将是列表中的id,map将只是空map。当然,我可以创建新的map,之后我可以迭代列表并将id和new HashMap〈String,String〉放入新的map。但是有可能在一个流中完成吗?使用generate()和collect()方法?
Map<Integer, Map<String, String>>
generate()
collect()
nnsrf1az1#
您可以使用Collectors.toMap(...)
ids.stream().collect(Collectors.toMap( Function.identity(), id -> new HashMap<String, String>() ));
Collectors.toMap需要两个参数:首先,一个密钥Map器,在我们的例子中,我们将使用流中的当前ID,所以id -> id或简单地Function.identity()。然后,对于值Map器,对于每个id,我们创建一个新的HashMap(),此外,您可以将其声明为__ -> new HashMap<String, String>()(使用“__”作为stram中元素的名称将表明您对其值不感兴趣,并且所有值Map器都返回相同的值)。
Collectors.toMap
id -> id
Function.identity()
__ -> new HashMap<String, String>()
u5rb5r592#
您希望使用Collectors.toMap()收集要Map的流。示例:
public class Test { public static void main(String[] args) { List<Integer> ids = new ArrayList<>(Arrays.asList(1,2,3)); Map<Integer, Map<String, String>> result = ids.stream() .collect(Collectors.toMap(num -> num, num -> new HashMap<>())); } }
2条答案
按热度按时间nnsrf1az1#
您可以使用Collectors.toMap(...)
Collectors.toMap
需要两个参数:首先,一个密钥Map器,在我们的例子中,我们将使用流中的当前ID,所以id -> id
或简单地Function.identity()
。然后,对于值Map器,对于每个id,我们创建一个新的HashMap(),此外,您可以将其声明为
__ -> new HashMap<String, String>()
(使用“__”作为stram中元素的名称将表明您对其值不感兴趣,并且所有值Map器都返回相同的值)。u5rb5r592#
您希望使用Collectors.toMap()收集要Map的流。示例: