1)List<VO>转Map<String,List<VO>>
public class Test {
public static void main(String[] args) {
/**
* 根据courseId分组
* 根据1个或多个属性分组
*/
Map<String, List<Student>> groupMap = getList().stream().collect(
Collectors.groupingBy(Student::getCourseId));
// Map<String, List<Student>> groupMap = getList().stream().collect(
// Collectors.groupingBy(s->s.getCourseId()+s.getName()));
groupMap.forEach((courseIdKey,students)->{
System.out.println("courseId:"+courseIdKey);
System.out.println("sidList:"+students.stream().map(Student::getSid).collect(Collectors.toList()));
});
/**
* 把某唯一属性作为key,对应的Student对象作为value
*/
Map<String, Student> studentMap = getList().stream().collect(Collectors
.toMap(Student::getSid, item -> item));
// Map<String, Student> studentMap = getList().stream().collect(Collectors
// .toMap(s->s.getSid()+s.getName(), item -> item));
System.out.println(studentMap);
}
private static List<Student> getList(){
List<Student> list = new ArrayList<>();
Student student = new Student();
student.setSid("123");
student.setName("xiaowang");
student.setCourseId("666");
list.add(student);
Student student2 = new Student();
student2.setSid("124");
student2.setName("xiaoliu");
student2.setCourseId("666");
list.add(student2);
return list;
}
}
@Data
class Student {
private String sid;
private String name;
private String courseId;
}
2)List<VO>转Map<String,List<String>>
public static void main(String[] args) {
List<Student> studentList = getList();
//courseId -->sidList
Map<String, List<String>> studentMap = studentList.stream()
.collect(Collectors.groupingBy(
Student::getCourseId,
Collectors.mapping(Student::getSid, Collectors.toList())
));
System.out.println(studentMap);
}
3)List<VO>根据某几个属性做聚合
list对象根据某几个属性将多条数据聚合为一条数据,有些字段需要做累加处理。
/** * 根据skuId+activityId属性 做聚合 */ @Data public class GoodsPriceVo { private String skuId; private String activityId; private Integer price; private Integer num; public static void main(String[] args) { List<GoodsPriceVo> priceVoList = new ArrayList<>(); GoodsPriceVo goodsPriceVo = new GoodsPriceVo(); goodsPriceVo.setSkuId("123"); goodsPriceVo.setActivityId("a0001"); goodsPriceVo.setPrice(20); goodsPriceVo.setNum(2); GoodsPriceVo goodsPriceVo2 = new GoodsPriceVo(); goodsPriceVo2.setSkuId("123"); goodsPriceVo2.setActivityId("a0001"); goodsPriceVo2.setPrice(10); goodsPriceVo2.setNum(1); priceVoList.add(goodsPriceVo); priceVoList.add(goodsPriceVo2); System.out.println("聚合前:"+priceVoList); List<GoodsPriceVo> newGoodsPriceList = new ArrayList<>(); priceVoList.parallelStream().collect(Collectors.groupingBy(item -> item.getActivityId() + item.getSkuId(), Collectors.toList())) .forEach((id, transfer) -> transfer.stream().reduce((a, b) -> { GoodsPriceVo priceVo = new GoodsPriceVo(); priceVo.setSkuId(a.skuId); priceVo.setActivityId(a.getActivityId()); priceVo.setPrice(a.getPrice() + b.price); priceVo.setNum(a.getNum() + b.getNum()); return priceVo; } ).ifPresent(newGoodsPriceList::add)); System.out.println("聚合后:"+newGoodsPriceList); } }
聚合前:[GoodsPriceVo(skuId=123, activityId=a0001, price=20, num=2), GoodsPriceVo(skuId=123, activityId=a0001, price=10, num=1)]
聚合后:[GoodsPriceVo(skuId=123, activityId=a0001, price=30, num=3)]