java8 stream 的项目应用

提示:项目中常用lambda的表达式

java8 stream 的项目应用


案例

stream +索引 去除 更简洁,高效。

//定义list
List<User> list = new ArrayList<>();
User  user1 = new User();  
User  user2 = new User(); 
user1.serName("111");
user2.serName("222"); 
list.add(user1);
list.add(user2);
 
//删除集合中某一元素值
IntStream.range(0,list.size()).filter(i->
    list.get(i).getName().equals("222")).
boxed().findFirst().map(i->list.remove((int)i));
 
其中boxed为装箱操作
        

filter过滤,ParentId等于0或等于1

//filter过滤,ParentId等于0或等于1
List<DeptDTO> deptDTOList =
                deptDTOS.stream().filter(deptDTO -> deptDTO.getParentId().equals(0) || deptDTO.getParentId().equals(1)).collect(Collectors.toList());
        

list转map

Map<String, List<Integer>> map = list.stream().collect(Collectors.toMap(Function.identity(), s-> new ArrayList<>()));

list转linkedHashMap

 accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2,LinkedHashMap::new));

转成set时直接用toSet,或者用.distinct()做去重
把实体类的集合抽出某属性转成list

// 转成set时直接用toSet,或者用.distinct()做去重
// 把实体类的集合抽出某属性转成list
List<Integer> collect = banners.stream().map(BankBanner::getPictureSort).collect(Collectors.toList());

把实体类的集合转map

// 把实体类的集合转map

public Map<String, Account> getNameAccountMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2));
}

排序

//返回 对象集合以类属性一升序排序
list.stream().sorted(Comparator.comparing(::属性一));

//返回 对象集合以类属性一降序排序 注意两种写法
list.stream().sorted(Comparator.comparing(::属性一).reversed());//先以属性一升序,结果进行属性一降序
list.stream().sorted(Comparator.comparing(::属性一,Comparator.reverseOrder()));//以属性一降序
 
//返回 对象集合以类属性一升序 属性二升序
list.stream().sorted(Comparator.comparing(::属性一).thenComparing(::属性二));

//返回 对象集合以类属性一降序 属性二升序 注意两种写法
list.stream().sorted(Comparator.comparing(::属性一).reversed().thenComparing(::属性二));//先以属性一升序,升序结果进行属性一降序,再进行属性二升序
list.stream().sorted(Comparator.comparing(::属性一,Comparator.reverseOrder()).thenComparing(::属性二));//先以属性一降序,再进行属性二升序
 
//返回 对象集合以类属性一降序 属性二降序 注意两种写法
list.stream().sorted(Comparator.comparing(::属性一).reversed().thenComparing(::属性二,Comparator.reverseOrder()));//先以属性一升序,升序结果进行属性一降序,再进行属性二降序
list.stream().sorted(Comparator.comparing(::属性一,Comparator.reverseOrder()).thenComparing(::属性二,Comparator.reverseOrder()));//先以属性一降序,再进行属性二降序
 
//返回 对象集合以类属性一升序 属性二降序 注意两种写法
list.stream().sorted(Comparator.comparing(::属性一).reversed().thenComparing(::属性二).reversed());//先以属性一升序,升序结果进行属性一降序,再进行属性二升序,结果进行属性一降序属性二降序
list.stream().sorted(Comparator.comparing(::属性一).thenComparing(::属性二,Comparator.reverseOrder()));//先以属性一升序,再进行属性二降序<br><br><br>

过滤把list转map

// 把list转map
personList.stream().filter(t -> t.getName()!=null)
.collect(Collectors.toMap(Person::getCode,Person::getName,(k1,k2)->k2));

获取某实体类集合某字段中最大/最小的值

// 获取某实体类集合某字段中最大/最小的值
userList.stream().max(Comparator.comparing(User::getAge)).get();
userList.stream().min(Comparator.comparing(User::getAge)).get();

获取某整数集合某字段中最大/最小的值

// 获取某整数集合某字段中最大/最小的值
integerList.stream().max(Integer :: max).get();
integerList.stream().min(Integer :: max).get();

获取集合某字段中最大值

// 获取集合某字段中最大值
timeList.stream().filter(o -> o.getTime() != null).map(TimeTest::getTime).distinct().max((e1, e2) -> e1.compareTo(e2)).get();

大于2L 和 小于等于2进行 分组

//大于2L 和 小于等于2进行 分组
Map<Boolean, List<DxUser>> collect1 = list.stream().collect(Collectors.groupingBy(x -> x.getId() > 2));
System.out.println("===大于2L==");
collect1.get(true).forEach(System.out::println);
System.out.println("===小于等于2L==");
collect1.get(false).forEach(System.out::println);

分割,聚合,分组

Student s1 = new Student("aa", 10,1);
Student s2 = new Student("bb", 20,2);
Student s3 = new Student("cc", 10,3);
List<Student> list = Arrays.asList(s1, s2, s3);
  
//装成list
List<Integer> ageList = list.stream().map(Student::getAge).collect(Collectors.toList()); // [10, 20, 10]
  
//转成set
Set<Integer> ageSet = list.stream().map(Student::getAge).collect(Collectors.toSet()); // [20, 10]
  
//转成map,注:key不能相同,否则报错
Map<String, Integer> studentMap = list.stream().collect(Collectors.toMap(Student::getName, Student::getAge)); 
// {cc=10, bb=20, aa=10}
  
//字符串分隔符连接
String joinName = list.stream().map(Student::getName).collect(Collectors.joining(",", "(", ")")); // (aa,bb,cc)
  
//聚合操作
//1.学生总数
Long count = list.stream().collect(Collectors.counting()); // 3
//2.最大年龄 (最小的minBy同理)
Integer maxAge = list.stream().map(Student::getAge).collect(Collectors.maxBy(Integer::compare)).get(); // 20
//3.所有人的年龄
Integer sumAge = list.stream().collect(Collectors.summingInt(Student::getAge)); // 40
//4.平均年龄
Double averageAge = list.stream().collect(Collectors.averagingDouble(Student::getAge)); // 13.333333333333334
// 带上以上所有方法
DoubleSummaryStatistics statistics = list.stream().collect(Collectors.summarizingDouble(Student::getAge));
System.out.println("count:" + statistics.getCount() + ",max:" + statistics.getMax() + ",sum:" + statistics.getSum() + ",average:" + statistics.getAverage());
  
//分组
Map<Integer, List<Student>> ageMap = list.stream().collect(Collectors.groupingBy(Student::getAge));
//多重分组,先根据类型分再根据年龄分
Map<Integer, Map<Integer, List<Student>>> typeAgeMap = list.stream().collect(Collectors.groupingBy(Student::getType, Collectors.groupingBy(Student::getAge)));
  
//分区
//分成两部分,一部分大于10岁,一部分小于等于10岁
Map<Boolean, List<Student>> partMap = list.stream().collect(Collectors.partitioningBy(v -> v.getAge() > 10));
  
//规约
Integer allAge = list.stream().map(Student::getAge).collect(Collectors.reducing(Integer::sum)).get(); //40

参考文章
链接: Java8中Stream详细用法大全.
链接: java8 stream 的项目中的使用 经典案例!.

推荐文章
链接: Java8 Stream:2万字20个实例.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值