Java List对象集合按对象属性分组、分组汇总、过滤等操作示例

Java List对象集合按对象属性分组、分组汇总、过滤等操作示例
public class PersonData {
	private String id;
	private String type;
	private String name;
	private int age;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	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 PersonData(String id, String type, String name, int age) {
		super();
		this.id = id;
		this.type = type;
		this.name = name;
		this.age = age;
	}

	public PersonData() {

	}
}

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Test {
    public static void main(String[] args){
        List<PersonData> list = new ArrayList<PersonData>();
        PersonData p1 = new PersonData();
        p1.setId("1");
        p1.setName("张三");
        p1.setType("管理员");
        p1.setAge(20);
        list.add(p1);

        PersonData p2 = new PersonData();
        p2.setId("2");
        p2.setName("李四");
        p2.setType("管理员");
        p2.setAge(30);
        list.add(p2);

        PersonData p3 = new PersonData();
        p3.setId("3");
        p3.setName("王五");
        p3.setType("用户");
        p3.setAge(40);
        list.add(p3);

        PersonData p4 = new PersonData();
        p4.setId("4");
        p4.setName("马六");
        p4.setType("访客");
        p4.setAge(50);
        list.add(p4);

        //跟据某个属性分组
        Map<String, List<PersonData>> collect = list.stream().collect(Collectors.groupingBy(PersonData::getType));
        System.out.println(collect);
        
        //根据某个属性分组,汇总某个属性
        Map<String, Integer> collect2 = list.stream().collect(Collectors.groupingBy(PersonData::getType,Collectors.summingInt(PersonData::getAge)));
        System.out.println(collect2);
        
        //根据某个属性添加条件过滤数据,
        list = list.stream().filter(u -> !u.getType().equals("访客")).collect(Collectors.toList());
        System.out.println(list);
        
        //判断一组对象里面有没有属性值是某个值
        boolean add = list.stream().anyMatch(m -> "王五".equals(m.getName()));
        System.out.println(add);
        
        //取出一组对象的某个属性组成一个新集合
        List<String> names=list.stream().map(PersonData::getName).collect(Collectors.toList());
        System.out.println(names);
    }
}

打印结果
{用户=[com.test4.PersonData@19a45b3], 访客=[com.test4.PersonData@99a589], 管理员=[com.test4.PersonData@372a00, com.test4.PersonData@dd8dc3]}
{用户=40, 访客=50, 管理员=50}
[com.test4.PersonData@372a00, com.test4.PersonData@dd8dc3, com.test4.PersonData@19a45b3]
true
[张三, 李四, 王五]
package yj.pojo;

public class PersonData {

    private String productCode;
    private String grade;
    private Integer maxAmount;
    private Integer maxMonths;
    private  double rate;

    public String getProductCode() {
        return productCode;
    }

    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public int getMaxAmount() {
        return maxAmount;
    }

    public void setMaxAmount(int maxAmount) {
        this.maxAmount = maxAmount;
    }

    public int getMaxMonths() {
        return maxMonths;
    }

    public void setMaxMonths(int maxMonths) {
        this.maxMonths = maxMonths;
    }

    public double getRate() {
        return rate;
    }

    public void setRate(double rate) {
        this.rate = rate;
    }

    public PersonData() {
    }

    public PersonData(String productCode, String grade, int maxAmount, int maxMonths, double rate) {
        this.productCode = productCode;
        this.grade = grade;
        this.maxAmount = maxAmount;
        this.maxMonths = maxMonths;
        this.rate = rate;
    }

    @Override
    public String toString() {
        return "PersonData{" +
                "productCode='" + productCode + '\'' +
                ", grade='" + grade + '\'' +
                ", maxAmount=" + maxAmount +
                ", maxMonths=" + maxMonths +
                ", rate=" + rate +
                '}';
    }
}


package yj.pojo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Test {
    public static void main(String[] args) {
        List<PersonData> list = new ArrayList<PersonData>();
        PersonData p1 = new PersonData("PIL","A1",49999,9,0.4);
        PersonData p2 = new PersonData("PIL","A1",49999,12,0.3);
        PersonData p3 = new PersonData("PIL","A1",49999,15,0.2);
        PersonData p4 = new PersonData("PIL","A1",49999,18,0.1);
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        PersonData p5 = new PersonData("PIL","A2",49999,9,0.4);
        PersonData p6 = new PersonData("PIL","A2",49999,12,0.3);
        PersonData p7 = new PersonData("PIL","A2",49999,15,0.2);
        PersonData p8 = new PersonData("PIL","A2",49999,18,0.1);
        list.add(p5);
        list.add(p6);
        list.add(p7);
        list.add(p8);
        PersonData p9 = new PersonData("DC","A1",49999,9,0.4);
        PersonData p10 = new PersonData("DC","A1",49999,12,0.3);
        PersonData p11 = new PersonData("DC","A1",49999,15,0.2);
        PersonData p12 = new PersonData("DC","A1",49999,18,0.1);
        list.add(p9);
        list.add(p10);
        list.add(p11);
        list.add(p12);
        PersonData p13 = new PersonData("DC","A2",49999,9,0.4);
        PersonData p14 = new PersonData("DC","A2",49999,12,0.3);
        PersonData p15 = new PersonData("DC","A2",49999,15,0.2);
        PersonData p16 = new PersonData("DC","A2",49999,18,0.1);
        list.add(p13);
        list.add(p14);
        list.add(p15);
        list.add(p16);
        //跟据某个属性分组
        Map<String, List<PersonData>> collect1 = list.stream().collect(Collectors.groupingBy(pers -> pers.getProductCode()+"_"+pers.getGrade()+"_"+pers.getMaxAmount()));

        List<Map<String,Object>> countRecords = collect1.keySet().stream().map(key -> {
            String[] temp = key.split("_");
            String productCode = temp[0];
            String grade = temp[1];
            String maxAmount = temp[2];

            Map<String,Object> goodObject = new HashMap<String,Object>();
            goodObject.put("productCode",productCode);
            goodObject.put("grade",grade);
            goodObject.put("maxAmount",maxAmount);

            Map<Integer,Object> valuemaps = new HashMap<Integer,Object>();
            List<PersonData>  aaa = collect1.get(key);
            for (PersonData bbb : aaa){
                valuemaps.put(bbb.getMaxMonths(),bbb.getRate());

            }
            goodObject.put("ggg",valuemaps);

            return goodObject;
        }).collect(Collectors.toList());
        System.out.println(countRecords);

    }
}

```java
打印结果
[{
	productCode=DC,
	ggg={
		18Months=0.1,
		12Months=0.3,
		9Months=0.4,
		15Months=0.2
	},
	grade=A2,
	maxAmount=49999
},
{
	productCode=PIL,
	ggg={
		18Months=0.1,
		12Months=0.3,
		9Months=0.4,
		15Months=0.2
	},
	grade=A2,
	maxAmount=49999
},
{
	productCode=DC,
	ggg={
		18Months=0.1,
		12Months=0.3,
		9Months=0.4,
		15Months=0.2
	},
	grade=A1,
	maxAmount=49999
},
{
	productCode=PIL,
	ggg={
		18Months=0.1,
		12Months=0.3,
		9Months=0.4,
		15Months=0.2
	},
	grade=A1,
	maxAmount=49999
}]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想要从 List 对象集合中获取某个属性组成新的集合,可以使用 Java 8 的 Stream API 或者传统的 for 循环实现。下面分别给出这两种实现方式的示例代码。 Java 8 的 Stream API 实现方式: ```java List<User> userList = Arrays.asList( new User("Jack", 20), new User("Lucy", 18), new User("Tom", 25) ); List<Integer> ageList = userList.stream() .map(User::getAge) .collect(Collectors.toList()); System.out.println(ageList); // 输出结果为 [20, 18, 25] ``` 上述代码中,我们首先创建了一个 User 对象List 集合,然后使用 Stream API 中的 map 方法,将 List 中的每个 User 对象转换成其年龄属性,并使用 collect 方法将其转换为 List<Integer> 集合。最后通过打印输出的方式来展示转换结果。 传统的 for 循环实现方式: ```java List<User> userList = Arrays.asList( new User("Jack", 20), new User("Lucy", 18), new User("Tom", 25) ); List<Integer> ageList = new ArrayList<>(); for (User user : userList) { ageList.add(user.getAge()); } System.out.println(ageList); // 输出结果为 [20, 18, 25] ``` 上述代码中,我们遍历 User 对象List 集合,将每个 User 对象的年龄属性添加到一个新的 List<Integer> 集合中。最后通过打印输出的方式来展示转换结果。 上述示例代码中,我们使用 User 对象作为示例,你可以将其替换成你自己的对象,并使用对应的属性和方法名来实现相应的转换操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值