简体   繁体   English

如何使用java 8将二维对象Set / ArrayList转换为一个Flat Set / List

[英]How to Convert two dimension object Set/ArrayList into one Flat Set/List using java 8

I'm new in java 8 , I have Set of Set for example: 我是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);

EXPECTED RESULT: FLAT SET...something like: 预期结果:平板设置...类似于:

But it doesn't work! 但它不起作用!

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

Any ideas? 有任何想法吗?

You only need to call flatMap once : 您只需要调用一次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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM