提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
JAVA8新特性之Stream流的相关操作
记录
主要是记录我书写代码中关于steam流的相关运用
Stream流的一些操作
1.stream流中anyMatch
stream流中anyMatch 只要有一个满足条件就返回true
User u1= new User(1, "A", 10);
User u2 = new User (2, "B", 12);
User u3 = new User (3, "C", 14);
User u4 = new User (4, "D", 12);
List<User> list = Arrays.asList(u1, u2, u3, u4);
// list中有年龄大于13的返回true
boolean flag = list.stream().anyMatch(item -> item.getAge() > 13);
System.out.println(flag);
2.steam中的collect
steam中的.collect 取出某个对象中的某个属性返回为一个分隔符隔开的字符串
List<String> idList;
//将集合['','','']处理成('','','')
String idsNew = idList.stream().map((id) -> "'"+id+"'").collect(Collectors.joining(",", "(", ") "));
//如果只是想变成以逗号或者其他符号的字符串
String ids = idList.stream().map((id) -> "'"+id+"'").collect(Collectors.joining(","));
该处使用的url网络请求的数据。
3.steam中的filter
stream().filter()的用法 过滤List对象(查找符合对象集合)我一般与collect连用
//查出自己的对象集合
List<MenuInfo> menuInfos = authJdbcDao.getRoleMenus(roleId);
//返回对象集合halfChecked属性等于0的集合
List<MenuInfo> roleMenuCodes = menuInfos.stream().filter(menu -> menu.getHalfChecked() == 0).collect(Collectors.toList());
4.steam中的forEach
就是一个遍历的作用
List<TsmRoleUrlGroup> newRelas = new ArrayList<TsmRoleUrlGroup>(rela.getGroupIds().size());
rela.getGroupIds().stream().forEach((groupId) -> {
TsmRoleUrlGroup tsmRoleUrlGroup = new TsmRoleUrlGroup();
tsmRoleUrlGroup.setRoleId(rela.getRoleId());
tsmRoleUrlGroup.setGroupId(groupId);
newRelas.add(tsmRoleUrlGroup);
});
5.steam中的distinct()
去除数据集合中重复的对象或者值
//传进来的参数
List<Integer> roleIds = rela.getRoleIds();
//对筛选出来的值进行去重处理
List<Integer> roleNewIds = new ArrayList<>();
roleNewIds.addAll(roleIds);
roleNewIds.stream().filter(e -> auditRoleIds.contains(e) && (!oldRoleIds.contains(e))).distinct().forEach(e -> {
roleAttaches.add(ReviewRoleAttach.builder().roleId(e).status(1).build());
roleIds.remove(e);
}
);
6.steam中的map 与 flatMap
map 与 flatMap 都是用于转换已有的元素为其它元素,区别点在于:
map 必须是一对一的,即每个元素都只能转换为一个新的元素。
flatMap 可以是一对多的,即每个元素都可以转换为一个或者多个新的元素。
map里面如果加了{}(e->{retrun “111”;})就必须要返回值如果不加里面可以直接写逻辑;
List<String> ids = Arrays.asList("205","105","308","469","627","193","111");
// 使用流操作
List<User> results = ids.stream()
.map(s -> User.builder().id(Integer.valueOf(s)).build())
.collect(Collectors.toList());
System.out.println(results);
//输出结果[User(id=205), User(id=105), User(id=308), User(id=469), User(id=627), User(id=193), User(id=111)]
List<String> sentences = Arrays.asList("hello world","Jia Gou Wu Dao");
// 使用流操作
List<String> results = sentences.stream()
.flatMap(sentence -> Arrays.stream(sentence.split(" ")))
.collect(Collectors.toList());
System.out.println(results);
//输出结果[hello, world, Jia, Gou, Wu, Dao]结果列表中元素个数是比原始列表元素个数要多的
总结
目前只用到了这些后面再增加