iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java8如何根据list对象中的属性过滤筛选
  • 956
分享到

java8如何根据list对象中的属性过滤筛选

2024-04-02 19:04:59 956人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录根据list对象中的属性过滤筛选根据性别筛选出所有的女同学list根据对象某个字段或多个字段去重、筛选、List转Map、排序、分组、统计计数等简单示例如下过滤筛选分组去重Lis

根据list对象中的属性过滤筛选

代码演示:

根据性别筛选出所有的女同学

@Data
        class Student{
            public Integer age;
            public String name;
            public String sex;
        }
        List<Student> students = new ArrayList<>();
        Student student1 = new Student();
        student1.setAge(18);
        student1.setName("赵");
        student1.setSex("男");
        Student student2 = new Student();
        student2.setAge(19);
        student2.setName("钱");
        student2.setSex("女");
        Student student3 = new Student();
        student3.setAge(20);
        student3.setName("孙");
        student3.setSex("女");
        Collections.addAll(students,student1,student2,student3);
        //根据条件过滤 出所有的女同学
        List<Student> result = students.stream().filter(student -> student.getSex().equals("女")).collect(Collectors.toList());
        System.out.println(result);

执行结果:

filter方法:

对流的过滤,将一个流转换成另一个子集流

list根据对象某个字段或多个字段去重、筛选、List转Map、排序、分组、统计计数等

我们利用 java8 的新特性,可以方便简洁高效的处理一些集合的数据。

简单示例如下

先定义一个订单对象(Order)

public class Order { 
    private Long id;
    private Long userId;
    private String num;
    private String type;
    private Float allAmt;
    private Float payAmt;
    private Integer orderNum;
 
    public Order(Long id, Long userId, String num, String type, Float allAmt, Float payAmt, Integer orderNum) {
        this.id = id;
        this.userId = userId;
        this.num = num;
        this.type = type;
        this.allAmt = allAmt;
        this.payAmt = payAmt;
        this.orderNum = orderNum;
    }
    // getting...  setting...
}

过滤筛选

List<Order> orders = Lists.newArrayList();
  
// 筛选总金额大于1000的订单
orders = orders.stream().filter(item -> item.getAllAmt() > 1000.00f).collect(Collectors.toList());

分组

List<Order> orders = Lists.newArrayList();
  
// 按照订单类型分组
Map<String, List<Order>> orderGroupMap = orders.stream().collect(Collectors.groupingBy(Order::getType));

去重

List<Order> orders = Lists.newArrayList();
  
// 按照订单编号去重
orders = orders.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()
          -> new TreeSet<>(Comparator.comparing(Order::getNum))), ArrayList::new));
 
// 按照订单编号和类型去重
orders = orders.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()
          -> new TreeSet<>(Comparator.comparing(o -> o.getNum() + ";" + o.getType()))), ArrayList::new));

List 转 Map

List<Order> orders = Lists.newArrayList();
  
// 将订单集合转换成订单编号-应付金额 map,注意订单编号作为 key 不能重复,应先做去重处理
Map<String, Float> numPayMap = orders.stream().collect(Collectors.toMap(Order::getNum, Order::getPayAmt));
 
// 用 id 做 key 将 List 转成 Map
Map<Long, Order> orderMap = orders.stream().collect(Collectors.toMap(Order::getId, item -> item));

排序

List<Order> orders = Lists.newArrayList();
  
  // 按照订单总金额从高到低排序
  // 方式一
  orders.sort((o1, o2)
          -> o1.getAllAmt() == null ? 1 : (o2.getAllAmt() == null ? -1 : o2.getAllAmt().compareTo(o1.getAllAmt())));
 
  // 方式二
  orders.sort(Comparator.comparing(Order::getAllAmt, (o1, o2)
          -> o1 == null ? 1 : (o2 == null ? -1 : o2.compareTo(o1))));
 
  // 方式三 (allAmt 字段不能为 null, null 会导致排序失败)
  orders.sort(Comparator.comparing(Order::getAllAmt).reversed());
 
  // 先按照订单类型排序,再按照订单应付金额从高到低排序
  orders.sort(Comparator.comparing(Order::getType, (o1, o2)
          -> o1 == null ? 1 : (o2 == null ? -1 : o1.compareTo(o2))).thenComparing((o1, o2)
          -> o1.getPayAmt() == null ? 1 : (o2.getPayAmt() == null ? -1 : o2.getPayAmt().compareTo(o1.getPayAmt()))));

统计计数

List<Order> orders = Lists.newArrayList();
  
  // 统计所有订单的总金额
  // 求和
  Double sum = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).sum();
 
  // 最大总金额
  OptionalDouble max = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).max();
  // 防止没有订单数据的处理
  Double maxAllAmt = max.isPresent() ? max.getAsDouble() : 0;
  
  // 最小总金额
  OptionalDouble min = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).min();
 
  // 平均总金额
  OptionalDouble average = orders.stream().filter(item -> item.getAllAmt() != null).mapToDouble(Order::getAllAmt).average();

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: java8如何根据list对象中的属性过滤筛选

本文链接: https://www.lsjlt.com/news/148060.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java8如何根据list对象中的属性过滤筛选
    目录根据list对象中的属性过滤筛选根据性别筛选出所有的女同学list根据对象某个字段或多个字段去重、筛选、List转Map、排序、分组、统计计数等简单示例如下过滤筛选分组去重Lis...
    99+
    2024-04-02
  • java8如何根据某一属性条件快速筛选list中的集合
    目录根据某一属性条件快速筛选list中的集合1、创建个Student对象2、编写测试类list 根据实体属性搜索代码测试根据某一属性条件快速筛选list中的集合 1、创建个Stude...
    99+
    2024-04-02
  • java8根据某一属性过滤去重的实例
    目录java8根据某一属性过滤去重根据list某一属性去重过滤StudentExamState=0的数据过滤ExamRoomStudentCount=0的数据Java8 stream...
    99+
    2024-04-02
  • java如何根据List内对象的属性进行排序
    这篇文章主要介绍了java如何根据List内对象的属性进行排序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。方法一:实现Comparator接口,并重写compare方法实体...
    99+
    2023-05-30
  • java List<对象> 根据对象的一个属性进行去重
    1.如果你想根据对象的一个属性进行去重,可以使用Java 8中的Stream API。具体步骤如下: 实现一个自定义函数,该函数将用于确定两个对象是否相等,例如: public static Predicate distinctByPro...
    99+
    2023-09-01
    java list
  • java8实现List中对象属性的去重方法
    java8的stream流能完美解对象集合去重问题. List<UserCar> list1 = new ArrayList(); UserCar userCa...
    99+
    2024-04-02
  • Java8对List集合中的数据进行过滤处理
    目录 0.需求场景 1.编码实现 0.需求场景         假设有这样一个需求,将List中所有超过 35 岁的员工剔除,该如何实现呢?我们可以利用 Java8 的流式编程,轻松的实现这个需求。         当然也不局限与上述场...
    99+
    2023-09-02
    java steam map java8 list
  • java8如何用Stream查List对象某属性是否有重复
    目录使用Stream查List对象某属性是否有重复练习一下stream的一些用法list的五种去重方式方法一:使用java8新特性stream进行List去重方法二:双重for循环去...
    99+
    2024-04-02
  • 根据list中对象的属性去重和排序小结(必看篇)
    如下所示://去重public class User { private int id; private String name; private int age; public User(){} public...
    99+
    2023-05-31
    java list 对象
  • web中如何根据具体属性值选择
    小编给大家分享一下web中如何根据具体属性值选择,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 除了选择拥有某些属性的元素,还...
    99+
    2024-04-02
  • java 对象list使用stream根据某一个属性转换成map的几种方式
    可以使用Java 8中的Stream API将List转换为Map,并根据某个属性作为键或值。以下是一些示例代码: 将List转换为Map,键为某个属性,值为对象本身 List personList = ... // 假设这是一个Perso...
    99+
    2023-08-17
    java spring boot stream list
  • 如何从对象数组中筛选符合条件的值
    目录从对象数组中筛选符合条件的值js根据已有数组,从数组对象中筛选数据解决思路从对象数组中筛选符合条件的值 const arr = [1,2,3,4,5,6,7] const lis...
    99+
    2024-04-02
  • JavaScript如何通过for-in循环检查对象的属性
    这篇文章主要介绍了JavaScript如何通过for-in循环检查对象的属性,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。通过for-in循...
    99+
    2024-04-02
  • 如何使用php接口和ECharts实现统计图的数据筛选和过滤
    如何使用php接口和ECharts实现统计图的数据筛选和过滤,需要具体代码示例在数据可视化中,使用统计图表是一种常见的展示数据方式。在实际应用中,经常需要对数据进行筛选和过滤,从而满足不同的需求。PHP 接口和 ECharts 是两个广泛应...
    99+
    2023-12-17
    echarts 数据筛选 PHP接口
  • 如何使用php接口和ECharts实现统计图的数据过滤和筛选
    如何使用PHP接口和ECharts实现统计图的数据过滤和筛选概述:ECharts是一款优秀的数据可视化图表库,而PHP是一种常用的服务器端语言。结合PHP接口和ECharts,我们可以使用PHP来对数据进行过滤和筛选,然后将筛选后的数据传递...
    99+
    2023-12-17
    echarts PHP接口 数据过滤和筛选
  • JavaScript中如何对大量数据的多重过滤
    本篇文章为大家展示了JavaScript中如何对大量数据的多重过滤,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。所有代码使用 ES2015 语法,需要 ES5 语法...
    99+
    2024-04-02
  • javascript中如何动态合并两个对象的属性
    小编给大家分享一下javascript中如何动态合并两个对象的属性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们可以使用扩展操作符(...)将不同的对象合并为...
    99+
    2023-06-15
  • 如何在PHP中修改对象数组属性的值
    一、简介在PHP中,一个对象可能包含多个属性,这些属性可以是不同的数据类型,包括字符串、数字、数组等。在开发过程中,可能需要修改某个对象的属性值。本文将介绍如何在PHP中修改对象数组属性的值。二、代码示例考虑下面这个简单的PHP类:clas...
    99+
    2023-05-14
  • js如何设置对象中的动态属性名称
    这篇文章主要为大家展示了“js如何设置对象中的动态属性名称”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js如何设置对象中的动态属性名称”这篇文章吧。对象中的动态属性名称使用动态键设置对象属性很...
    99+
    2023-06-27
  • js如何根据json数据中的某一个属性来给数据分组
    这篇文章主要介绍js如何根据json数据中的某一个属性来给数据分组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!如下所示:<!DOCTYPE html> <...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作