首先定义一个Person对象(省略get/set等方法),方便下面理解:
public class Person {
private Long id;
private String name;
private Integer age;
private Short sex;
private BigDecimal money;
}
创建一个基础list:
List<Person> list = new ArrayList<>();
Person p1 = new Person(Long.valueOf("1"),"张三",12,(short)1,new BigDecimal(15.00));
Person p2 = new Person(Long.valueOf("2"),"李四",15,(short)2,new BigDecimal(13.00));
Person p3 = new Person(Long.valueOf("3"),"王五",13,(short)1,new BigDecimal(16.00));
Person p4 = new Person(Long.valueOf("4"),"赵六",17,(short)2,new BigDecimal(16.00));
Person p5 = new Person(Long.valueOf("5"),"钱七",18,(short)2,new BigDecimal(15.00));
Person p6 = new Person(Long.valueOf("1"),"钱七",15,(short)2,new BigDecimal(15.00));
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
list.add(p6);
list相关操作:
1.单项求和:
//计算 总金额
BigDecimal totalMoney = list.stream().map(Person::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
//计算 总年龄
Integer sunAge = list.stream().map(Person::getAge).reduce(0,Integer::sum);
2.筛选:
//筛选出符合条件的数据
//姓名
List<Person> nameList = list.stream().filter(a -> a.getName().equals("张三")).collect(Collectors.toList());
//性别
List<Person> sexList = list.stream().filter(a -> a.getSex().equals((short)2)).collect(Collectors.toList());
//大于15岁
List<Person> ageList = list.stream().filter(demo -> Integer.valueOf(demo.getAge()) > 15).collect(Collectors.toList());
3.去重:
// 根据id去重
List<Person> unique = list.stream().collect(
collectingAndThen(toCollection(() -> new TreeSet<>(comparingLong(Person::getId))), ArrayList::new));
4.分组:
//List 以sex分组 Map<Short,List<Apple>>
Map<Short, List<Person>> groupBy = list.stream().collect(Collectors.groupingBy(Person::getSex));
5.list转map
//list转map
/**
* List -> Map
* 需要注意的是:
* toMap 如果集合对象有重复的key,会报错Duplicate key ....
* 可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
*/
Map<Long, Person> map = list.stream().collect(Collectors.toMap(Person::getId, a -> a,(k1,k2)->k1));
6排序
// 排序
List<Person> sortList = list.stream().sorted((s1, s2) -> s1.getAge().compareTo(s2.getAge())).collect(Collectors.toList());
ps.gitee代码地址:https://gitee.com/HuangyinGl/hytests.git