1.List 转 Map
public void listToMap(){
// list 集合
List<Entity> list = getList();
//list 转 map Map<String,String>
/**
* 注意事项:
* 1、key 不能为空
* 2、key 需要唯一
* 3、作为key的值有可能重复,这时候流的处理会抛出个异常:Java.lang.IllegalStateException:Duplicate key 所以最好加上(k1, k2) -> k2 合并策略,如果有相同key 取哪一个(这里指取k2)
*/
Map<String, String> stringMap = list.stream().collect(Collectors.toMap(Entity::getId, Entity::getName, (k1, k2) -> k2));
//list 转 map Map<String,Entity>
// 对实体进行分组
Map<String, Entity> entityMap = list.stream().collect(Collectors.toMap(Entity::getId, e -> e, (k1, k2) -> k2));
}
2.针对实体提取list集合
public void findList(){
// list 集合
List<Entity> list = getList();
/**
* filter:根据某个条件过滤
* distinct:去重
*/
List<String> collect = list.stream().map(Entity::getName).filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList());
}
3.分组
public void group(){
// list 集合
List<Entity> list = getList();
/**
* 1.需要保证分组key不能为空
*/
Map<String, List<Entity>> collect = list.stream().filter(entity -> StringUtils.isNotEmpty(entity.getName())).collect(Collectors.groupingBy(Entity::getName));
}
4.计算
public void calculate(){
// list 集合
List<Entity> list = getList();
/**
* 1.需要保证计算的字段值不能为空,否则会报错
*/
// BigDecimal 的计算方法
BigDecimal reduce = list.stream().map(entity -> null == entity.getCount() ? BigDecimal.ZERO : entity.getCount()).reduce(BigDecimal.ZERO, BigDecimal::add);
// int ,long 等计算方法
int sum = list.stream().mapToInt(Entity::getaInteger).sum();
Integer integer = list.stream().map(Entity::getaInteger).reduce(Integer::sum).orElse(0);
}
5.分组计算
public void calculateGroup(){
// list 集合
List<Entity> list = getList();
/**
* 1.需要保证计算的字段值不能为空,否则会报错
*/
// BigDecimal 的计算方法
Map<String, BigDecimal> collect = list.stream().collect(Collectors.groupingBy(Entity::getName,
Collectors.reducing(BigDecimal.ZERO, entity -> null == entity.getCount() ? BigDecimal.ZERO : entity.getCount(),
BigDecimal::add)));
// int ,long 等计算方法
list.stream().collect(Collectors.groupingBy(Entity::getName,
Collectors.summarizingInt(entity -> null == entity.getaInteger() ? 0 : entity.getaInteger())));
}
排序,过滤,就不在这说了。
详情可以去看这篇博客 https://blog.csdn.net/mu_wind/article/details/109516995