如何流式传输 Set<Set<Integer>> 并将其放入 HashMap 作为值?

问题描述

我有一套:

Set<Set<Integer>> nestedSet = Set.of(Set.of(1,9),Set.of(0,2,4),Set.of(14,1),Set.of(2,23,13),22));

我想要存档的是按时间顺序流过nestedSet(我知道一个集合不是按时间顺序排列的,我应该使用LinkedHashSet代替吗?)并将每个集合作为值放入Hashmap . Hashmap 的 key 应该是一个以 0 开头的索引。 像这样:

HashMap<Integer,Set<Integer>> hashMap = new HashMap<>();
for ( int i = 0; i < nestedSet.size; i++){
 nestedSet.stream();
 hashMap.put(i,firstSet);
}

输出应该是:

System.out.printl(hashMap);
{0=[1,9],1=[0,4],2=[14,1],3=[2,13],4=[14,22]} 

解决方法

这样使用

    AtomicInteger counter = new AtomicInteger(0);
    Map<Integer,Set<Integer>> map = nestedSet.stream()  .collect(Collectors.toMap(x -> counter.getAndIncrement(),x -> x));

为了在集合中维护插入顺序,您使用链接的 HashSet

,

实际上你可以跳过 AtomicInteger 的开销。加上更简单的方法来创建保持插入顺序所需的 LinkedHashSet:

public class App {
    public static void main(String[] args) {
        Set<Set<Integer>> nestedSet = linkedSetOf(linkedSetOf(1,9),linkedSetOf(0,2,4),linkedSetOf(14,1),linkedSetOf(2,23,13),22));
        var sharedCounter = new Object() {
            int counter;
        };
        Map<Integer,Set<Integer>> map = nestedSet.stream().collect(Collectors.toMap(num -> sharedCounter.counter++,num -> num));
        System.out.println(map);
    }

    @SafeVarargs
    public static <T> LinkedHashSet<T> linkedSetOf(T... objs) {
        var hashSet = new LinkedHashSet<T>();
        Collections.addAll(hashSet,objs);
        return hashSet;
    }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...