如何使用 java 8 将二维对象 Set/ArrayList 转换为一个平面 Set/List
How to Convert two dimension object Set/ArrayList into one Flat Set/List using java 8
我是 java 8 的新手,我有 Set of Set 例如:
Set<Set<String>> aa = new HashSet<>();
Set<String> w1 = new HashSet<>();
w1.add("1111");
w1.add("2222");
w1.add("3333");
Set<String> w2 = new HashSet<>();
w2.add("4444");
w2.add("5555");
w2.add("6666");
Set<String> w3 = new HashSet<>();
w3.add("77777");
w3.add("88888");
w3.add("99999");
aa.add(w1);
aa.add(w2);
aa.add(w3);
预期结果:平局...类似于:
但是不行!
// HERE I WANT To Convert into FLAT Set
// with the best PERFORMANCE !!
Set<String> flatSet = aa.stream().flatMap(a -> setOfSet.stream().flatMap(ins->ins.stream().collect(Collectors.toSet())).collect(Collectors.toSet()));
有什么想法吗?
您只需调用 flatMap
一次 :
Set<String> flatSet = aa.stream() // returns a Stream<Set<String>>
.flatMap(a -> a.stream()) // flattens the Stream to a
// Stream<String>
.collect(Collectors.toSet()); // collect to a Set<String>
作为@Eran 正确答案的替代方案,您可以使用 3 参数 collect
:
Set<String> flatSet = aa.stream().collect(HashSet::new, Set::addAll, Set::addAll);
我是 java 8 的新手,我有 Set of Set 例如:
Set<Set<String>> aa = new HashSet<>();
Set<String> w1 = new HashSet<>();
w1.add("1111");
w1.add("2222");
w1.add("3333");
Set<String> w2 = new HashSet<>();
w2.add("4444");
w2.add("5555");
w2.add("6666");
Set<String> w3 = new HashSet<>();
w3.add("77777");
w3.add("88888");
w3.add("99999");
aa.add(w1);
aa.add(w2);
aa.add(w3);
预期结果:平局...类似于:
但是不行!
// HERE I WANT To Convert into FLAT Set
// with the best PERFORMANCE !!
Set<String> flatSet = aa.stream().flatMap(a -> setOfSet.stream().flatMap(ins->ins.stream().collect(Collectors.toSet())).collect(Collectors.toSet()));
有什么想法吗?
您只需调用 flatMap
一次 :
Set<String> flatSet = aa.stream() // returns a Stream<Set<String>>
.flatMap(a -> a.stream()) // flattens the Stream to a
// Stream<String>
.collect(Collectors.toSet()); // collect to a Set<String>
作为@Eran 正确答案的替代方案,您可以使用 3 参数 collect
:
Set<String> flatSet = aa.stream().collect(HashSet::new, Set::addAll, Set::addAll);