前言
java流处理是java8最重要的特性,在处理一些集合的时候特别方便。在工作中经常用到,做一下笔记总结一下吧!流处理内容很多,我重点写工作中经常使用的几种场景。要想详细了解,请看java8新特性之流式处理.
简介
项目中,我需要对用户的身份证进行脱敏处理,因为数据涉及推送至其他平台,所以无法在sql语句和service层处理,需要在controller层处理。
List<BlacklistEntity> blacklistList = (List<BlacklistEntity>) page.getList();
for(BlacklistEntity black : blacklistList){
black.setIdcardno(StringUtil.TMIDCard(black.getIdcardno()));
}
上面是通常处理方法,下面使用流处理相同的操作
page.setList(page.getList().stream().map(m->{
EntJkmRecordEntity s = (EntJkmRecordEntity)m;
s.setIdcard(StringUtil.TMIDCard(s.getIdcard()));
return s;
}).collect(Collectors.toList()));
虽然我也没看出简洁了多少,但是在有些时候会简洁很多,而且如果是多线程处理会更加快捷。
常用操作
筛选(filter)
在一个集合中筛选出符合我们的集合
List<String> strList = new ArrayList<>();
strList.add("ABC");
strList.add("BAC");
strList.add("CBD");
strList.add("DEF");
strList.add("EGH");
strList.add("FJK");
strList.add("GBK");
// 筛选包含 "B" 的字符串组成新的列表
List aList = strList.stream().filter(str -> str.indexOf("B")>-1).collect(Collectors.toList());
System.out.println("strList"+strList);
System.out.println("aList"+aList);
输出:
strList[ABC, BAC, CBD, DEF, EGH, FJK, GBK]
aList[ABC, BAC, CBD, GBK]
stream()操作将集合转换成一个流
filter()执行我们自定义的筛选处理
lambda表达式
collect()对结果进行封装处理
Collectors.toList()指定其封装成为一个List集合返回
lambda表达式
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
-> 执行
:: 执行类中的方法
映射(map)
一般用于处理集合中对象的数据
page.setList(page.getList().stream().map(m->{
EntJkmRecordEntity s = (EntJkmRecordEntity)m;
s.setIdcard(StringUtil.TMIDCard(s.getIdcard()));
return s;
}).collect(Collectors.toList()));
还有一些没用到我就不写了,以后用到再记录下来。