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
}]