Java 1.8 List集合排序、去重、分组、过滤、合并、截取操作

这篇具有很好参考价值的文章主要介绍了Java 1.8 List集合排序、去重、分组、过滤、合并、截取操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、排序

1、正序


List<UserVO> newvos = vos.stream().sorted(Comparator.comparing(UserVO::getTime)).collect(Collectors.toList());

2、逆序


List<UserVO> newvos = vos.stream().sorted(Comparator.comparing(UserVO::getTime).reversed()).collect(Collectors.toList());

3、根据某个属性或多个属性排序
多个属性排序:需要添加排序条件就在后面添加.thenComparing(UserVO::getxxx),它是在上一个条件的基础上进行排序


List<UserVO> list10 = listTemp.stream().sorted(Comparator.comparing(UserVO::getNum)
                    .thenComparing(UserVO::getName);
                    

二、去重

1、去重


List<UserVO> newvos = vos.stream().distinct().collect(Collectors.toList());

2、根据某个属性去重(它将该字段还进行排序了)


List<UserVO> newvos = vos.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->new TreeSet<>(Comparator.comparing(UserVO::getId))), ArrayList::new));

3、根据某个属性去重(这个方法没有排序)

import java.util.function.Function;
import java.util.function.Predicate;

List<UserVO> newvos= result.stream().filter(distinctByKey(o -> o.getId())).collect(Collectors.toList());


public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
     Map<Object, Boolean> map = new HashMap<>();
     return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}

4、对多个对象去重(它将该字段还进行排序了)


List<UserVO> newvos = list.stream().collect( Collectors.collectingAndThen( Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o->o.getID()+ ";" + o.getName()))),ArrayList::new)); 

三、分组

1、单条件分组


Map<String, List<UserVO>> groupedMap = result.stream().collect(Collectors.groupingBy(dto -> dto.getId()));
// 提取分组后的列表
List<List<UserVO>> resultLists = new ArrayList<>(groupedMap.values());
for (List<UserVO> resultList : resultLists) {
	//方法体
}

2、多条件分组

在groupingBy里面添加分组条件(dto -> dto.getId() +“|” +dto.getName())

四、过滤

1、在集合中查询用户名user为lkm的集合


List<UserVO> newvos = vos.stream().filter(o ->"lkm".equals(o.getName())).collect(Collectors.toList());

2、在集合中不要用户名user为lkm的集合(true是要,false是不要)

		List<UserVO> newVos = vos.stream().filter(o ->{
			if("lkm".equals(o.getName())){
				return false;
			}else{
				return true;
			}
		}).collect(Collectors.toList());

五、合并

1、合并集合某个属性


List<UserVO> newvos = list.stream().collect(Collectors.toMap(BillsNums::getId, a -> a, (o1,o2)-> {
				o1.setNums(o1.getNums() + o2.getNums());
				o1.setSums(o1.getSums() + o2.getSums());
				return o1;
			})).values().stream().collect(Collectors.toList());
			

六、截取

集合截取有两种方法,分别是list.subList(0, n)和Stream处理,前者集合如果不足n条,会出现异常错误,而后者截取前n条数据,哪怕集合不足n条数据也不会报错。文章来源地址https://www.toymoban.com/news/detail-790884.html

List<String> sublist = list.stream().limit(n).collect(Collectors.toList());

到了这里,关于Java 1.8 List集合排序、去重、分组、过滤、合并、截取操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中list集合stream流去重

    准备类: (1)根据单字段name去重 (2)根据多字段name price去重 (3)示例 输出打印结果

    2024年02月09日
    浏览(35)
  • Java中使用流将两个集合根据某个字段进行过滤去重?

    要是需要GPT Plus账号的小伙伴可以联系我~ 在Java中,您可以使用流(Stream)来过滤和去重两个集合。下面是一个示例代码,展示如何根据对象的某个字段进行过滤和去重操作: 在这个示例中,我们创建了一个 Person 类表示人员信息,包含 name 和 age 两个字段。我们使用流的 filte

    2024年02月12日
    浏览(32)
  • Java对List<Map>进行合并去重

    对List 进行合并去重,首先创建一个新的 List 用于存储合并去重后的结果,遍历原始的 List ,将每个 Map 对象中的键值对放入一个 Set 中进行去重,最后将去重后的键值对重新组装成一个新的 Map 对象,并添加到新的 List 中。 完整实例代码如下: 简单示例仅供参考

    2024年02月05日
    浏览(31)
  • Java list集合中根据其中两个字段去重

    可以使用Java 8的Stream API和Collectors.toSet()方法来实现根据其中两个字段去重。 首先,使用Stream API将List转换为Stream,然后使用distinct()方法进行去重。distinct()方法默认使用元素的equals()和hashCode()方法进行去重。如果想要根据其中两个字段进行去重,需要重写equals()和hashCode()方法

    2024年02月16日
    浏览(38)
  • java系列之list集合分组

    在Java编程中,List集合是一种常用的数据结构,用于存储一组元素。有时候,我们需要对List集合中的元素进行分组操作,即将相同属性或特征的元素归类到一组。这种分组操作在数据处理和分析中非常常见,能够帮助我们更好地组织和处理数据。 Java提供了多种实现List接口的

    2024年02月09日
    浏览(33)
  • Java当中List集合根据对象某个属性进行去重

    关于以下方法,直接可以在自己项目创建一个类,然后进行测试使用,去重方式有很多种,文本末尾也提供了每个方法的运行结果,供大家参考使用! 文章大量使用到了Java8当中的Lambda表达式,以及stream流相关基础知识。如果您用的不熟,没关系,可以直接复制下面的方案然

    2024年02月16日
    浏览(41)
  • Java中List集合对象去重及按属性去重的8种方法

    是大家最容易想到的,先把List数据放入Set,因为Set数据结构本身具有去重的功能,所以再将SET转为List之后就是去重之后的结果。这种方法在去重之后会改变原有的List元素顺序,因为HashSet本身是无序的,而TreeSet排序也不是List种元素的原有顺序。 去重后的集合: [kobe, james,

    2024年04月15日
    浏览(33)
  • # java合并两个list 并去重,指定保留其中一个list的重复数据

    在Java中,有多种方法可以合并两个List并去重,指定保留其中一个List的重复数据。下面介绍几种常见的方法,并附上代码示例。 该方法首先将一个List的所有元素加入到目标List中,然后遍历另一个List,如果目标List中不包含该元素,则将该元素加入到目标List中。最后得到的就

    2024年02月02日
    浏览(41)
  • JAVA8 获取list集合中重复的元素和获取去重数据

    1.java8获取list集合中重复的元素 2.java8根据List对象属性获取重复数据和获取去重后数据 2.1获取重复数据 结果: 根据多个属性获取重复数据,还在摸索中,欢迎大家来指点!!!!! 2.2获取去重后数据 结果:

    2024年02月12日
    浏览(35)
  • java 对List集合中元素对象按字段分组,并收集指定字段的值

    一、实现:对已有对象集合ListPersion ,需要获取Persion对象的字段 name分组, 并对年龄age字段值做收集 二、字段分组收集方法  注:由于实际业务只有String类型跟数字类型,所以只对String跟Object两种类型判空 三、测试代码 四、结果

    2024年02月15日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包