目录
前言
本篇记录一下一些常用的stream()方法搭配Lambda表达式的使用。
1、List转Map
代码如下:
ArrayList<User> users = new ArrayList<>();
users.add(new User(1L,"小鱼",18, "杭州"));
users.add(new User(2L,"小白",12, "北京"));
users.add(new User(3L,"小宏",20, "深圳"));
users.add(new User(4L,"小率",30, "广州"));
users.add(new User(5L,"小黑",26, "南京"));
users.add(new User(6L,"小平",17, "杭州"));
users.add(new User(7L,"小帅",23, "北京"));
users.add(new User(8L,"小栏",40, "杭州"));
users.add(new User(9L,"小飞棍",32, "南京"));
users.add(new User(10L,"ikun",28, "深圳"));
System.out.println("----------------------list转map-------------------------");
/**
* list转map
* 使用Collectors.toMap的时候,如果有重复的会报错,所以需要 + ( k1 , k2 ) -> k1
* ( k1 , k2 ) -> k1表示,如果有重复的key,则保留第一个,舍弃第二个
*/
Map<Long, User> map = users.stream().collect(Collectors.toMap(User::getId,user -> user, (k1,k2) -> k1));
map.forEach( (k,v) -> {System.out.println(k + ":" + v);});
结果如下:
2、filter过滤
代码如下:
ArrayList<User> users = new ArrayList<>();
users.add(new User(1L,"小鱼",18, "杭州"));
users.add(new User(2L,"小白",12, "北京"));
users.add(new User(3L,"小宏",20, "深圳"));
users.add(new User(4L,"小率",30, "广州"));
users.add(new User(5L,"小黑",26, "南京"));
users.add(new User(6L,"小平",17, "杭州"));
users.add(new User(7L,"小帅",23, "北京"));
users.add(new User(8L,"小栏",40, "杭州"));
users.add(new User(9L,"小飞棍",32, "南京"));
users.add(new User(10L,"ikun",28, "深圳"));
System.out.println("----------------------filter过滤-------------------------");
//过滤年龄小于18岁,保留大于18岁的数据
List<User> collect3 = users.stream().filter(user -> user.getAge() > 18).collect(Collectors.toList());
collect3.forEach(System.out::println);
结果如下:
3、groupingBy分组
代码如下:
ArrayList<User> users = new ArrayList<>();
users.add(new User(1L,"小鱼",18, "杭州"));
users.add(new User(2L,"小白",12, "北京"));
users.add(new User(3L,"小宏",20, "深圳"));
users.add(new User(4L,"小率",30, "广州"));
users.add(new User(5L,"小黑",26, "南京"));
users.add(new User(6L,"小平",17, "杭州"));
users.add(new User(7L,"小帅",23, "北京"));
users.add(new User(8L,"小栏",40, "杭州"));
users.add(new User(9L,"小飞棍",32, "南京"));
users.add(new User(10L,"ikun",28, "深圳"));
System.out.println("----------------------groupingby分组-------------------------");
//按照用户的城市分组
Map<String, List<User>> map = users.stream().collect(Collectors.groupingBy(User::getCity));
map.forEach( (k,v) -> {System.out.println(k + ":" + v);});
结果如下:
4、dinsinct去重
代码如下:
ArrayList<String> list = new ArrayList<>(
Arrays.asList("b","a","c","c","a","b")
);
System.out.println("----------------------去重-------------------------");
//去重
List<String> collect = list.stream().distinct().collect(Collectors.toList());
collect.forEach(System.out::println);
结果如下:
5、sorted+comparator排序
代码如下:
ArrayList<String> list = new ArrayList<>(
Arrays.asList("b","a","c","c","a","b")
);
//去重,升序排序
System.out.println("----------------------去重+升序排序-------------------------");
List<String> collect1 = list.stream().distinct().sorted(
Comparator.comparing(String::toString)).collect(Collectors.toList());
collect1.forEach(System.out::println);
//去重,降序排序
System.out.println("----------------------去重+降序排序-------------------------");
List<String> collect2 = list.stream().distinct().sorted(
Comparator.comparing(String::toString).reversed()).collect(Collectors.toList());
collect2.forEach(System.out::println);
结果如下:
6、返回第一个元素
代码如下:
ArrayList<String> list = new ArrayList<>(
Arrays.asList("b","a","c","c","a","b")
);
System.out.println("----------------------返回第一个元素-------------------------");
//如果存在第一个元素就打印
list.stream().findFirst().ifPresent(System.out::println);
结果如下:
7、检查是否至少包含一个匹配元素
代码如下:
ArrayList<String> list = new ArrayList<>(
Arrays.asList("b","a","c","c","a","b")
);
System.out.println("----------------------检查是否包含元素-------------------------");
boolean match = list.stream().anyMatch(s -> s.contains("D"));
System.out.println("是否匹配:" + match);
结果如下:
8、Map转换
map方法可以帮我们做元素转换,比如将一个元素所有字母转化为大写,又或者把获取一个元素对象的某个属性输出。
代码如下:
ArrayList<String> list = new ArrayList<>(
Arrays.asList("b","a","c","c","a","b")
);
List<String> collect = list.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
collect.forEach(System.out::println);
结果如下:
9、max,min最大最小
代码:
ArrayList<User> users = new ArrayList<>();
users.add(new User(1L,"小鱼",18, "杭州"));
users.add(new User(2L,"小白",12, "北京"));
users.add(new User(3L,"小宏",20, "深圳"));
users.add(new User(4L,"小率",30, "广州"));
users.add(new User(5L,"小黑",26, "南京"));
users.add(new User(6L,"小平",17, "杭州"));
users.add(new User(7L,"小帅",23, "北京"));
users.add(new User(8L,"小栏",40, "杭州"));
users.add(new User(9L,"小飞棍",32, "南京"));
users.add(new User(10L,"ikun",28, "深圳"));
Optional<User> max = users.stream().max(Comparator.comparing(User::getAge));
System.out.println("最大年龄的用户:");
max.ifPresent(System.out::println);
Optional<User> min = users.stream().min(Comparator.comparing(User::getAge));
System.out.println("最小年龄的用户:");
min.ifPresent(System.out::println);
结果:
本期分享就到这里啦!