Java8 的各种骚操作(List->Map、过滤、类型转

2018-12-17  本文已影响10人  Cocoonshu粽子

前言

自从项目引入Java8,就想用一些骚气的语法糖,故总结一下~方便日后查找

数据结构准备

public class Item {
    private Long id;
    private String name;
    private Double score;
    private BigDecimal bigDecimal;

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getScore() {
        return score;
    }

    public void setScore(Double score) {
        this.score = score;
    }

    public BigDecimal getBigDecimal() {
        return bigDecimal;
    }

    public void setBigDecimal(BigDecimal bigDecimal) {
        this.bigDecimal = bigDecimal;
    }
}
    /**
     * init List
     * @return
     */
    private List<Item> initList(){
        List<Item> itemList = new ArrayList<>();
        for (int i=0;i<10;i++){
            Item item = new Item();
            item.setId((long) i);
            item.setName("Test"+i);
            item.setScore(Math.random());
            item.setBigDecimal(new BigDecimal(Math.random()));
            itemList.add(item);
        }
        return itemList;
    }

List 转Map

    /**
     *  * List -> Map
     *  * 需要注意的是:
     *  * toMap 如果集合对象有重复的key,会报错Duplicate key ....
     *  *  apple1,apple12的id都为1。
     *  *  可以用 (k1,k2)->k1 来设置,如果有重复的key,则保留key1,舍弃key2
     */
    private void listToMap(){
        List<Item> itemList = initList();
        Map<Long,Item> itemMap =  itemList.parallelStream().collect(Collectors.toMap(Item::getId, item -> item,(k1, k2)->k1));
    }

过滤

    /**
     * 从集合中过滤出来符合条件的元素:
     */
    private void filter(){
        List<Item> itemList = initList();
        List<Item> itemFilter =itemList.parallelStream().filter(item -> item.getId()!=null).filter(item -> item.getId()>0).collect(Collectors.toList());
    }

类型转换

    /**
     * 类型转换
     */
    private void typeConversion(){
        List<String> stringList = new ArrayList<>();
        List<Long> longList = stringList.parallelStream().map(Long::valueOf).collect(Collectors.toList());
    }

分组

    /**
     * 分组
     */
    private void groupingBy(){
        List<Item> itemList = initList();
        Map<Long,List<Item>> itemMap = itemList.parallelStream().collect(Collectors.groupingBy(Item::getId));
    }

求和

    /**
     * 属性求和
     */
    private void sum(){
        List<Item> itemList = initList();
        BigDecimal totalBigDecimal =  itemList.parallelStream().map(Item::getBigDecimal).reduce(BigDecimal.ZERO,BigDecimal::add);
        itemList.parallelStream().mapToDouble(Item::getScore).sum();
    }
上一篇下一篇

猜你喜欢

热点阅读