原创文章:转载请标明出处 https://www.cnblogs.com/yunqing/p/9504196.html

首先分析相当于如下,在所有的猫中,每个名字的猫都保留年龄最小的一个

import java.util.ArrayList;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors; public class test { public static void main(String[] args) {
List<Cat> list = new ArrayList<>();
list.add(new Cat("小花",1,1));
list.add(new Cat("小花",2,1));
list.add(new Cat("小2",3,1));
list.add(new Cat("小2",4,1));
list.add(new Cat("小3",5,1));
list.add(new Cat("小3",7,1));
list.add(new Cat("小花",3,1));
list.add(new Cat("小1",1,1));
list.add(new Cat("小1",2,1));
list.add(new Cat("小1",3,1));
list.add(new Cat("小3",3,1));
list.add(new Cat("小3",12,1)); List<Cat> result = new LinkedList<>(); Map<String, List<Cat>> res = list.stream().collect(Collectors.groupingBy(Cat::getName));
Set<String> keys = res.keySet(); for (String str : keys) {
List<Cat> groupList = list.stream().filter(e->e.getName().equals(str)).collect(Collectors.toList());
//以下两行都是找出组内年龄最小的猫
//Cat catMinAge0 = groupList.stream().reduce((one, two) -> one.getAge() < two.getAge() ? one : two).orElse(null);
Cat catMinAge1 = groupList.stream().min(Comparator.comparingInt(o -> o.getAge())).orElse(null);
result.add(catMinAge1);
} System.out.println(result); } } class Cat{
private String name;
private int age;
private int gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public Cat() {}
public Cat(String name, int age, int gender) {
super();
this.name = name;
this.age = age;
this.gender = gender;
}
@Override
public String toString() {
return "Cat [name=" + name + ", age=" + age + ", gender=" + gender + "]";
} }

  测试完毕,拿到项目中使用如下:

	@Override
@Transactional
public List<DrivingRecord> findByCityCodeAndRecordTimeStartingWith(String cityCode, String recondTime) {
//查询此区域今天所有用户的所有上报记录
List<DrivingRecord> list = drivingRecondDao.findByCityCodeAndRecordTimeStartingWith(cityCode, recondTime);
List<DrivingRecord> resultList = new ArrayList<>();
//先根据用户分组,把同一个用户的上报记录放到同一个组
Map<User, List<DrivingRecord>> map = list.stream()
.collect(Collectors.groupingBy(DrivingRecord::getUser));
//取出所有用户key值
Set<User> keys = map.keySet();
//遍历所有用户
for (User user : keys) {
//找出与当前用户的分组
List<DrivingRecord> groupList = list.stream()
.filter(u->u.getUser().equals(user))
.collect(Collectors.toList());
//比较时间,取当前用户的最新上报的记录
DrivingRecord dr = groupList.stream()
.reduce((one,two)->one.getRecordTime().isBefore(two.getRecordTime())?two:one)
.orElse(null);
//把所有用户的最新上报信息填到resultList
resultList.add(dr);
} return resultList;
}

  

Java8 Stream()关于在所有用户的所有上传记录中,找出每个用户最新上传记录的更多相关文章

  1. 用户管理 之 在Linux系统中,批量添加用户的操作流程

    一.阅读此文件您需要掌握的基础知识: <Linux 用户(user)和用户组(group)管理概述><用户(user)和用户组(group)配置文件详解><Linux 用 ...

  2. Oracle中找出用户的上次登录时间

    可以使用如下sql语句: select t1.username,t1.logon_time last_logon_time,t2.account_status,created 账号创建时间 from ...

  3. 如何用Java8 Stream API找到心仪的女朋友

    传统的的Java 集合操作是有些啰嗦的,当我们需要对结合元素进行过滤,排序等操作的时候,通常需要写好几行代码以及定义临时变量. 而Java8 Stream API 可以极大简化这一操作,代码行数少,且 ...

  4. java8 Stream的实现原理 (从零开始实现一个stream流)

    1.Stream 流的介绍 1.1 java8 stream介绍 java8新增了stream流的特性,能够让用户以函数式的方式.更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算. 1.2  ...

  5. 简洁又快速地处理集合——Java8 Stream(上)

    Java 8 发布至今也已经好几年过去,如今 Java 也已经向 11 迈去,但是 Java 8 作出的改变可以说是革命性的,影响足够深远,学习 Java 8 应该是 Java 开发者的必修课. 今天 ...

  6. Java8 Stream性能如何及评测工具推荐

    作为技术人员,学习新知识是基本功课.有些知识是不得不学,有些知识是学了之后如虎添翼,Java8的Stream就是兼具两者的知识.不学看不懂,学了写起代码来如虎添翼. 在上篇<Java8 Stre ...

  7. Java8 Stream 的最佳实践

    Java8 Stream 的最佳实践 java8stream提供了对于集合类的流失处理,其具有以下特点: Lazy Evaluation(长度可以无限) 只能使用一次 内部迭代 Lazy Evalua ...

  8. Java8 Stream API

    Stream是Java8中,操作集合的一个重要特性. 从iteration到Stream操作 当你操作一个集合的时候,你通常的做法是迭代每一个元素,然后处理你想要的事情.举个例子: String co ...

  9. java8 Stream常用方法和特性浅析

    有一个需求,每次需要将几万条数据从数据库中取出,并根据某些规则,逐条进行业务处理,原本准备批量进行for循环或者使用存储过程,但是for循环对于几万条数据来说效率较低:存储过程因为逻辑非常复杂,写起来 ...

随机推荐

  1. Git建立独立分支

    前言 在码云建立git项目后默认分支是master, 这里如果直接在码云新建分支, 会指定默认分支; 所以通过git 命令git checkout --orphan 新分支名 创建独立分支 创建 创建 ...

  2. UML 简介笔记

    1. UML 是什么? UML 统一建模语言是一组图形表示法,可以帮助描述和设计软件系统,特别是使用面向对象 OO 风格建造的软件系统. 2. 使用 UML 的方式 UML 有 3 种使用模式:草稿, ...

  3. Microsoft ReportViewer 控件类型版本兼容问题及解决方法

    错误 Parser Error Message: The base class includes the field 'rvEquipment', but its type (Microsoft.Re ...

  4. <meta name="viewport"content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">的作用

    本人对该标签理解不深,这里是复制了穆乙的文章:如果有人进来看到这篇文章,请按此https://www.cnblogs.com/pigtail/archive/2013/03/15/2961631.ht ...

  5. Maven学习总结(六):pom.xml文件的说明

    什么是POM? POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml.作用类似ant的build.xml文件,功能 ...

  6. drupal7 STMP邮件模块配置

    drupal7.54 STMP  version = "7.x-1.6" 配置:   注意:上面的“用户名”需要和“站点信息”页面的电子邮件地址保持一致,邮件发送才能成功 ---- ...

  7. springmvc中Controller前端控制器的映射与返回数据,以及异常处理

    .@RequestMapping映射 该注解中存的是映射路径的字符串 1.1 value的值是一个数组,也就是说可以定义多个访问路径,同时“.action”可以省略,前端控制器中主要查找主体部分.注意 ...

  8. FileWriter与BufferedWriter的适用场景

    IO这块,各种Writer,Reader,让人眼晕 而在网上基本找不到在什么时候用哪个类,并且网上的IO demo 很多用法都是错的 在这简单的分析一下FileWriter与BufferedWrite ...

  9. hibernate简单入门教程(一)---------基本配置

    应用级别所以很粗浅 首先介绍一下hibernate框架: 1.优秀的持久化(通俗讲把内存上的短时间运行信息存储在持久化硬盘上)框架. 2.作用于持久层,因为没什么侵入性,所以同样适用于其他层面上的存储 ...

  10. jquery使页面滚动到底部

    function scrollToEnd(){//滚动到底部 var h = $(document).height()-$(window).height(); $(document).scrollTo ...