1.方法定义:
此方法是在进行归纳动作结束之后,对归纳的结果进行二次处理。
2.代码演示:
user类准备
/**
* @desc: 用户实体类
* @author: shy
* @date: 2020/12/28 12:38
*/
@data
@allargsconstructor
public class user {
//用户id
int userid;
//用户姓名
string username;
//用户工资
double salary;
}数据填充
//数据准备 user user1 = new user(1, "hangman", 100d); user user2 = new user(1, "list", 200d); user user3 = new user(2, "wing", 200d); user user4 = new user(2, "zeal", 100d); user user5 = new user(3, "tuba", 300d); list<user> userlist = new arraylist<>(); userlist.add(user1); userlist.add(user2); userlist.add(user3); userlist.add(user4); userlist.add(user5);
1.对集合根据id进行去重并返回去重后的list:
//对集合的结果进行去重
list<user> list = userlist.stream()
.collect(collectors.collectingandthen(collectors.tocollection(() -> new treeset<>(comparator.comparing(user::getuserid))), arraylist::new));
system.out.println(list);
2.对集合根据id进行去重并返回去重后的map:
//对集合的结果进行去重
map<integer, user> usermap = userlist.stream()
.collect(collectors.collectingandthen(
collectors.tocollection(() -> new treeset<>(comparator.comparing(user::getid))),
treeset -> treeset.stream().collect(collectors.tomap(user::getid, user -> user, (u1, u2) -> u1))
));
system.out.println(usermap);
3.查找工资最高的员工的姓名:
//查找工资最高的员工的姓名 string username = userlist.stream() .collect(collectors.collectingandthen(collectors.maxby(comparator.comparing(user::getsalary)),(optional<user> user) -> user.map(user::getusername).orelse(null))); system.out.println(username);

4.计算用户工资的平均值:
//计算用户工资的平均值 double avgsalary = userlist.stream() .collect(collectors.collectingandthen(collectors.averagingdouble(user::getsalary), double::doublevalue)); system.out.println(avgsalary);

3.总结:
通过上面的例子,我们可以熟练的使用collectingandthen进行归纳的结果进行二次处理。
到此这篇关于java8中stream流的collectingandthen方法应用实例的文章就介绍到这了,更多相关java8 stream流 collectingandthen内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论