Java中stream流的常见用法
这篇文章主要是记录stream流的用法,因为stream流比较常用,并且一些操作较复杂,记录在此,以后参考。
1、filter用法
主要是用来过滤集合中的元素,较常用。
List<User> list = new ArrayList<>();
list.add(new User(1, "小赵", "beijing"));
list.add(new User(2, "小钱", "shanghai"));
list.add(new User(3, "小孙", "tianjin"));
list.add(new User(4, "小李", "nanjing"));
list.add(new User(5, "小周", "shenzhen"));
// 过滤出address=tianjin的
List<User> list1 = list.stream().filter(item -> "tianjin".equals(item.getAddress())).collect(Collectors.toList());
System.out.println(list1);
2、peek用法
主要是用来修改元素的状态,比如其中对象的字段等
List<User> list = new ArrayList<>();
list.add(new User(1, "小赵", "beijing"));
list.add(new User(2, "小钱", "shanghai"));
list.add(new User(3, "小孙", "tianjin"));
list.add(new User(4, "小李", "nanjing"));
list.add(new User(5, "小周", "shenzhen"));
// peek操作主要用于修改集合中的元素
// 修改元素中的address为guangzhou
List<User> list2 = list.stream().peek(item -> item.setAddress("guangzhou")).collect(Collectors.toList());
System.out.println(list2);
3、map用法
主要是用来替换集合中的元素
List<User> list = new ArrayList<>();
list.add(new User(1, "小赵", "beijing"));
list.add(new User(2, "小钱", "shanghai"));
list.add(new User(3, "小孙", "tianjin"));
list.add(new User(4, "小李", "nanjing"));
list.add(new User(5, "小周", "shenzhen"));
// map操作主要是修改集合元素本身,也有一部分peek的功能
// 将list的元素替换成元素的字段或者替换成其他的对象
List<Integer> list3 = list.stream().map(User::getId).collect(Collectors.toList());
System.out.println(list3);
// map也可以用来peek的功能,比如下面例子,不过idea会提示用peek的
List<User> list4 = list.stream().map(item -> {
item.setAddress("beijing");
return item;
}).collect(Collectors.toList());
System.out.println(list4);
4、flatmap用法
主要是将集合中的元素换成stream流
List<String> list1 = Arrays.asList("a", "b");
List<String> list2 = Arrays.asList("1", "2", "3");
// flatmap主要是将集合中的元素换成stream流
List<String> list3 = list1.stream().flatMap(item -> list2.stream().map(i -> item + i)).collect(Collectors.toList());
// 将list1和list2中的元素拼接成list3
// [a1, a2, a3, b1, b2, b3]
System.out.println(list3);
5、list转map用法
这种场景是用于根据对象已知字段查找集合中对应元素文章来源:https://www.toymoban.com/news/detail-528652.html
List<User> list = new ArrayList<>();
list.add(new User(1, "小赵", "beijing"));
list.add(new User(2, "小钱", "shanghai"));
list.add(new User(3, "小孙", "tianjin"));
list.add(new User(4, "小李", "nanjing"));
list.add(new User(5, "小周", "shenzhen"));
// 将list转成map
// 一般这种场景是用于根据对象已知字段查找集合中对应元素
// 这种一般用于key是唯一的,不然异常,或者用下一种
Map<Integer, User> map = list.stream().collect(Collectors.toMap(User::getId, Function.identity()));
Map<Integer, User> map1 = list.stream().collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key2));
6、分组用法
这种一般用于按照元素的字段等条件进行分组文章来源地址https://www.toymoban.com/news/detail-528652.html
List<User> list = new ArrayList<>();
list.add(new User(1, "小赵", "beijing"));
list.add(new User(2, "小钱", "shanghai"));
list.add(new User(3, "小孙", "tianjin"));
list.add(new User(4, "小李", "nanjing"));
list.add(new User(5, "小周", "shenzhen"));
Map<Integer, List<User>> map = list.stream().collect(Collectors.groupingBy(User::getId));
到了这里,关于Java中stream流的常见用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!