List.stream() 各方法应用
jdk8新特性,string集合、integer集合均可随意转换成string。
List.Stream流,通过将集合转换为这么一种叫做 “流” 的元素序列,通过声明性方式,能够对集合中的每个元素进行一系列并行或串行的流水线操作。
函数式编程带来的好处尤为明显。这种代码更多地表达了业务逻辑的意图,而不是它的实现机制。易读的代码也易于维护、更可靠、更不容易出错。
面对一对多结构,查询主实体时需要附带主实体的子实体列表怎么写?
查出主列表,循环差子列表。
List的Stream流操作可以简化我们的代码,减少程序运行的压力,应对上面的问题,以前的话是先查出对应的list数据,然后根据取到集合中id去查找对应的子实体中数据,接着在放入对应的集合中去,key值表示主实体的id,value值表示对应主实体id查到的结合数据,这样就会三次foreach循环组装数据,会很麻烦,当数据量大的时候,会增加程序运行的负荷,造成运行缓慢。
所以,流式操作代替我们的这一堆操作,提高了代码的简易性,可维护性,可靠性,更不容易出错。
stream()优点:流(stream)的使用详解:无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。
为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。
惰式执行。stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。
可消费性。stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。
Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了。
简单说,对 Stream 的使用就是实现一个 filter-map-reduce 过程,产生一个最终结果,或者导致一个副作用(side effect)。
(1) filter(T -> boolean)保留 boolean 为 true 的元素
保留年龄为 20 的 person 元素
list = list.stream().filter(person -> person.getAge() == 20)
.collect(toList());
collect(toList()) 可以把流转换为 List 类型
(2)sorted() / sorted((T, T) -> int)如果流中的元素的类实现了 Comparable 接口,即有自己的排序规则,那么可以直接调用 sorted() 方法对元素进行排序,如 Stream
反之, 需要调用 sorted((T, T) -> int) 实现 Comparator 接口
根据年龄大小来比较:
list = list.stream()
.sorted((p1, p2) -> p1.getAge() - p2.getAge())
.collect(toList());
可简化为:
list = list.stream()
.sorted(Comparator.comparingInt(Person::getAge))
.collect(toList());
(3)limit(long n)返回前 n 个元素
list = list.stream()
.limit(2)
.collect(toList());
(4)skip(long n) 去除前 n 个元素
用在 limit(n) 前面时,先去除前 m 个元素再返回剩余元素的前 n 个元素
limit(n) 用在 skip(m) 前面时,先返回前 n 个元素再在剩余的 n 个元素中去除 m 个元素
list = list.stream()
.skip(2)
.collect(toList());
(5)map(T -> R) 将流中的每一个元素 T 映射为 R(类似类型转换)
Listnewlist = list.stream().map(Person::getName).collect(toList());
newlist 里面的元素为 list 中每一个 Person 对象的 name 变量
案例一:过滤非空,并切割串:
stringList.stream().filter(x -> x.length() > 0).filter(x -> x != null).collect(Collectors.joining(","))
// 导出此IP段所包含的标签数组 List案例二: (1)jdk8里面的方法,先将集合转换成流的形式,在转换成字符串bqList = zcchfxSysBqMapper.getListBybqId(list.get(i).getId()); if (bqList != null && bqList.size() > 0) { for (int j = 0; j < bqList.size(); j++) { ZcchfxSysBq zcchfxSysBq = bqList.get(j); for (int k = 0; k < bqflList.size(); k++) { ZcchfxSysBqfl zcchfxSysBqfl = bqflList.get(k); if (zcchfxSysBq.getBqflId().equals(zcchfxSysBqfl.getId())) { // 创建单元格 cell = row.createCell(k + 5); // 系统自定义的负责人 if ("负责人".equals(zcchfxSysBqfl.getName())) { List stringList = new ArrayList<>(); stringList.add(zcchfxSysBq.getName()); stringList.add(zcchfxSysBq.getPhone()); stringList.add(zcchfxSysBq.getEmail()); // 设置负责人值 cell.setCellValue(stringList.stream().filter(x -> x.length() > 0).filter(x -> x != null).collect(Collectors.joining(","))); } else { cell.setCellValue(zcchfxSysBq.getName()); } // 设置居中样式 cell.setCellStyle(cellStyle2); } } } }
jdk8新特性,string集合、integer集合均可随意转换成string。
ArrayList
或者 ArrayList 都是没有问题的。
ArrayListarrayList = new ArrayList (){{ add("1"); add("2"); add("2"); add("4"); }}; System.out.println(arrayList.stream().collect(Collectors.toList())); // [1,2,2,4] String str = arrayList.stream().map(integer -> integer.toString()) .collect(Collectors.joining(",")); System.out.println(str); // 1,2,2,4
ArrayList(2)Integer类型的集合,转换成字符串arrayList = new ArrayList (){{ add(1); add(2); add(2); add(4); }}; System.out.println(arrayList.stream().collect(Collectors.toList())); // [1,2,2,4] String str = arrayList.stream().map(integer -> integer.toString()) .collect(Collectors.joining(",")); System.out.println(str); // 1,2,2,4
// integer类型的集合转换成string ArrayList(3)String集合转换成string:StringUtils.join(stringList,",")list = new ArrayList(); list.add(1); list.add(2); list.add(3); list.add(4); System.out.println(list); // [1,2,3,4] StringBuilder result = new StringBuilder(); boolean flag = false; for (Integer integer : list) { if (flag) { result.append(","); } else { flag = true; } result.append(integer); } System.out.println(result); // 1,2,3,4
// String类型的集合转换成string ArrayListstringList = new ArrayList<>(); stringList.add("1"); stringList.add("2"); stringList.add("3"); stringList.add("4"); System.out.println(stringList); // [1,2,3,4] String string = StringUtils.join(stringList,","); System.out.println(string); // 1,2,3,4



