【问题标题】:convert a Collection of Set<Integer> to a list of lists将 Set<Integer> 的集合转换为列表列表
【发布时间】:2019-05-07 11:06:44
【问题描述】:

我有一个HashMap&lt;Integer, Set&lt;Integer&gt;&gt;.

我想将地图中集合的Collection 转换为列表列表。

例如:

import java.util.*;
import java.util.stream.*;
public class Example {

         public static void main( String[] args ) {
             Map<Integer,Set<Integer>> map = new HashMap<>();
             Set<Integer> set1 = Stream.of(1,2,3).collect(Collectors.toSet());
             Set<Integer> set2 = Stream.of(1,2).collect(Collectors.toSet());
             map.put(1,set1);
             map.put(2,set2);

             //I tried to get the collection as a first step
             Collection<Set<Integer>> collectionOfSets = map.values();

             // I neeed  List<List<Integer>> list = ...... 

             //so the list should contains[[1,2,3],[1,2]]
         }
    }

【问题讨论】:

    标签: java list collections set java-stream


    【解决方案1】:

    一种没有流的方式:

    List<List<Integer>> listOfLists = new ArrayList<>(map.size());
    map.values().forEach(set -> listOfLists.add(new ArrayList<>(set)));
    

    【讨论】:

      【解决方案2】:
       map.values()
          .stream()
          .map(ArrayList::new)
          .collect(Collectors.toList());
      

      你的开始很好:从 map.values() 开始。现在,如果您流式传输,则 Stream 中的每个元素都将是 Collection&lt;Integer&gt; (每个单独的值);并且您想将每个值转换为List。在这种情况下,我提供了一个ArrayList,它有一个接受Collection 的构造函数,因此ArrayList::new 方法参考用法。最后,所有这些单独的值(一旦转换为List)通过Collectors.toList()收集到一个新的List

      【讨论】:

        【解决方案3】:

        mapSet&lt;String&gt;ArrayList&lt;String&gt; 然后collect 到一个列表:

        List<List<Integer>> result = map.values() // Collection<Set<String>>
                                        .stream() // Stream<Set<String>>
                                        .map(ArrayList::new) // Stream<ArrayList<String>>
                                        .collect(toList()); // List<List<String>>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-29
          • 1970-01-01
          • 2022-11-12
          • 2013-12-16
          • 2017-02-06
          • 1970-01-01
          • 1970-01-01
          • 2011-08-02
          相关资源
          最近更新 更多