java 如何生成基于整数列表的包含Map?

ssm49v7z  于 2023-04-04  发布在  Java
关注(0)|答案(2)|浏览(123)

我有一个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()方法?

nnsrf1az

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器都返回相同的值)。

u5rb5r59

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

相关问题