java8函数式编程(一)

6 篇文章 1 订阅

需求

将List集合中选出每种颜色相同的元素中size最大的元素,将这些元素组成一个新集合。

List<Frog>

public Frog(String name, Integer age, String color, Double size, String desc) {
        this.name = name;
        this.age = age;
        this.color = color;
        this.size = size;
        this.desc = desc;
}

List<Frog> list = new ArrayList<>();
list.add(new Frog("aaa", 1, "green", 5.0, "111"));
list.add(new Frog("bbb", 2, "red", 5.1, "222"));
list.add(new Frog("ccc", 1, "blue", 5.2, "333"));
list.add(new Frog("ddd", 3, "blue", 5.2, "444"));
list.add(new Frog("eee", 3, "blue", 5.0, "555"));
list.add(new Frog("fff", 1, "green", 5.3, "666"));

需要将name为bbb,fff,ccc或ddd(其中一个)组成一个新集合

Java8

	List<Frog> result = new ArrayList<>();
        List<Frog> list = before();
        list.stream()
                .collect(Collectors.groupingBy(Frog::getColor))
                .forEach((k, v) -> {
                    result.add(v.stream().max(Comparator.comparingDouble(Frog::getSize)).get());
                });

        System.out.println("insert: " + list);
        System.out.println("result: " + result);

结果

insert: [Frog{name='aaa', age=1, color='green', size=5.0, desc='111'}, Frog{name='bbb', age=2, color='red', size=5.1, desc='222'}, Frog{name='ccc', age=1, color='blue', size=5.2, desc='333'}, Frog{name='ddd', age=3, color='blue', size=5.2, desc='444'}, Frog{name='eee', age=3, color='blue', size=5.0, desc='555'}, Frog{name='fff', age=1, color='green', size=5.3, desc='666'}]
result: [Frog{name='bbb', age=2, color='red', size=5.1, desc='222'}, Frog{name='fff', age=1, color='green', size=5.3, desc='666'}, Frog{name='ccc', age=1, color='blue', size=5.2, desc='333'}]

我的思路是先将集合按color分组组成一个(color,list)的map,然后遍历map,将map的value(分组后的list)中size最大的元素找出,放到已经创建好的result集合中。
最近刚开始接触java8的新特性,请路过的各位朋友指点,感激不尽!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值