设为首页 加入收藏

TOP

Stream流体系(四)
2023-07-25 21:22:38 】 浏览:73
Tags:Stream
ew Employee("武松",'男',15000,9000,null)); two.add(new Employee("李逵",'男',25000,10000,null)); two.add(new Employee("西门庆",'男',50000,10000,"迟到")); two.add(new Employee("潘金莲",'女',3500,1000,"打人")); two.add(new Employee("武大郎",'女',20000,0,"偷窃")); // 1、开发1部的最高工资的员工 //指定大小规则 // Employee employee = one.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus())) // .get(); Topperformer t = one.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus())) .map(e -> new Topperformer(e.getName(), e.getSalary() + e.getBonus())).get(); System.out.println(t); // 3-2、开发2部的最高工资信息 // 1)先用max定义规则,比较大小;2)用map进行加工 Topperformer topperformer = two.stream().max((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus())) .map(e -> new Topperformer(e.getName(), e.getSalary() + e.getBonus())).get(); System.out.println(topperformer); // 不能在main方法中定义一个局部变量供main方法中的foreach循环使用。 // 因为main方法和foreach属于不同的方法栈,在不同的栈里面跑,互相不能访问。 // 解决办法:共享变量:所有变量都可以访问,属于类 // 2、统计平均工资,去掉最高工资和最低工资 e1在前就是升序,e2在前就是降序 one.stream().sorted((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus())). skip(1).limit(one.size()-2).forEach(e->{ //求出总和:剩余员工的工资总和 allMoney += e.getBonus()+e.getSalary(); }); System.out.println("开发1部的平均工资是" +allMoney/(one.size()-2)); // 4-2、开发2部的平均月收入,去掉最高和最低工资。 two.stream().sorted((e1,e2)->Double.compare(e1.getSalary()+e1.getBonus(),e2.getSalary()+e2.getBonus())) .skip(1).limit(two.size()-2).forEach(employee -> { allMoney2 += employee.getSalary()+employee.getBonus(); }); System.out.println("开发2的平均月收入是"+allMoney2); // 3、合并2个集合流 Stream<Employee> s1 = one.stream(); Stream<Employee> s2 = two.stream(); Stream<Employee> s3 = Stream.concat(s1, s2); s3.sorted((e1, e2) -> Double.compare(e1.getSalary() + e1.getBonus(), e2.getSalary() + e2.getBonus())) .skip(1).limit(one.size()+two.size()-2).forEach(e ->{ allMoney3 += e.getSalary()+e.getBonus(); }); BigDecimal a = BigDecimal.valueOf(allMoney3); BigDecimal b = BigDecimal.valueOf(one.size()+ two.size()-2); System.out.println("2个部门的整体平均工资是" +a.divide(b,2, RoundingMode.HALF_UP)); } }

5 Stream流的收集操作

  • 收集Stream流的含义:把Stream流操作后的结果数据转回到集合或者数组中去。流只能使用一次。
  • Stream流:方便操作集合/数组的手段。
  • 集合/数组:才是开发中的目的。

image

  • 转换成list集合
Stream<String> s1 = list.stream().filter(s ->
		s.startsWith("张")
);
//List<String>  list1 = s1.toList();  //得到不可变集合
List<String> zhangList = s1.collect(Collectors.toList());
  • 转换成set集合
Stream<String> s2 = list.stream().filter(s ->
		s.startsWith("张")
);
Set<String> zhangList2 = s2.collect(Collectors.toSet());
  • 转换成数组
Stream<String> s3 = list.stream().filter(s -> s.startsWith("张"));
// Stream<String>转换成数组时,默认转换成Object形式
// Object[] arrs  =  s3.toArray();
// 如果非要把object类型转为String类型
String[] arrs = s3.toArray(s->new String[s]);
// String[] arrs2 = s3.toArray(String[]::new);
System.out.println(arrs); //输出数组的地址
首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇如何用chatGPT快速开发java后端功.. 下一篇如何通过Java代码将 PDF文档转为 ..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目