集合流之"交集(相同)和差集(区别的)"的使用
一.需求
今天做的是将两个字符串转为数组后再转集合,然后利用集合的流stream来进行差集过滤
二.差集代码
差集:将两个集合相同的数据去掉,留下不同的数据
1 @Test 2 public void wzwcs() 3 { 4 // 字符串1 5 String strOne = "123,1234"; 6 // 字符串2 7 String strTow = "123,1234,12345"; 8 // 已逗号分隔转为数组1 9 String[] splitOne = strOne.split(","); 10 // 已逗号分隔转为数组2 11 String[] splitTow = strTow.split(","); 12 // 将数组转为集合1 13 List<String> listOne = Arrays.asList(splitOne); 14 // 将数组转为集合2 15 List<String> listTow = Arrays.asList(splitTow); 16 // 直接写集合流将 集合2 流化,过滤(集合2的各个值->集合1.非包含(集合2的各个值)).转为set集合 17 Set <String> result = listTow.stream().filter(e->!listOne.contains(e)).collect(Collectors.toSet()); 18 // 遍历差集 19 for (String s : result) 20 { 21 // 打印 22 System.out.println("result.toString() = " + s); 23 } 24 }
三.交集代码
交集:将相同的代码留下
交集代码其实就非包含变为包含
1 @Test 2 public void wzwcs() 3 { 4 // 字符串1 5 String strOne = "123,1234"; 6 // 字符串2 7 String strTow = "12,123,1234,12345"; 8 // 已逗号分隔转为数组1 9 String[] splitOne = strOne.split(","); 10 // 已逗号分隔转为数组2 11 String[] splitTow = strTow.split(","); 12 // 将数组转为集合1 13 List<String> listOne = Arrays.asList(splitOne); 14 // 将数组转为集合2 15 List<String> listTow = Arrays.asList(splitTow); 16 // 直接写集合流将 集合2 流化,过滤(集合2的各个值->集合1.包含(集合2的各个值)).转为set集合 17 Set <String> result = listTow.stream().filter(e->listOne.contains(e)).collect(Collectors.toSet()); 18 // 遍历交集 19 for (String s : result) 20 { 21 // 打印 22 System.out.println("result.toString() = " + s); 23 } 24 }
结果
思考:
一般contains这里是大的包含小的,正常来说12也应该在列才对,但是他就是没有在说明他可能并非完整意义上的包含
"1234".contains("12"); //结果为true
四. 规范之“用流中的Stream.Of(arr1,arr2)将两个集合合并”
* 博客文章部分截图及内容来自于学习的书本及相应培训课程,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* 备注:王子威
* 我的网易邮箱:wzw_1314_520@163.com