【问题标题】:convert list to map using java8使用java8将列表转换为地图
【发布时间】:2021-08-27 11:37:17
【问题描述】:

我有一个数组列表

List<Integer> h = Arrays.asList(1,2,3,4,5,6);

我想过滤偶数,然后将它们存储在带有键的映射中,该键是从 1 开始的唯一数字,值是使用 java8 过滤的值

输出1-2 2-4 3-6

我将在收集中使用过滤器和Collectors.toMap()

Map<Integer,Integer> j =  h.stream().filter(fe->fe%2==0).collect(Collectors.toMap(?,?));

输出会是什么?

【问题讨论】:

  • 我不明白应该如何填充地图。为什么不是 1-2、2-3、3-4?
  • 是的,但最后有 3-6 不是对号。这就是为什么我不明白
  • 哦,是的!谢谢你
  • 你可以为你的直播尝试这样的事情,h.stream().forEach(fe-&gt; {if (fe % 2 == 0) { map.computeIfAbsent(map.size()+1,i-&gt;fe); }});
  • somthig 像这样:int[] counter = new int[1]{1}; ....collect(Collectors.toMap(counter[0]++, value -&gt; value))

标签: java java-8 java-stream


【解决方案1】:

类似的东西

List<Integer> h = Arrays.asList(1,2,3,4,5,6);
AtomicInteger f = new AtomicInteger(0);
Map<Integer,Integer> j = h.stream()
                    .filter(fe-> fe%2==0) 
                    .collect(Collectors.toMap(fs -> f.incrementAndGet(), fs -> fs));

【讨论】:

  • 啊测试这个 List h = Arrays.asList(1,2,3,4,5,6); AtomicInteger f = new AtomicInteger(0); Map j = h.stream() .filter(fe-> fe%2==0) .collect(Collectors.toMap(fs -> f.incrementAndGet(), fs -> fs));
  • 我刚刚更新了答案,如果是您要搜索的内容,请验证我的答案
【解决方案2】:

我没有测试过,也许这不是最好的想法,但如果你必须使用 Collectors.toMap,也许下面的方法可以工作

Map<Integer,Integer> j =  h.stream()
                           .filter(fe->fe%2==0)
                           .collect(Collectors.toMap(i ->{
            return h.stream().filter(fe->fe%2==0).collect(Collectors.toList()).indexOf(i);
        },Function.identity()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多