Lambda表达式的使用

Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。
它的基本用法如下:

(parameters) -> expression
或
(parameters) ->{ statements; }

lambda通常和stream一起使用, 使用lambda可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等。
下面来看具体的代码:

/**
 *
 * @version V1.0
 * @Title: lambda
 * @Package com.ly
 * @Description: 学习lambda表达式的使用
 * @author: HappyLiu
 * @date: 2019/2/18
 */
public class Lambda {

    public static void main(String[] args) {
//        String[] player = {"marin","blank","faker",""};
        List<Player> list = new ArrayList<>();
        list.add(new Player("marin",20));
        list.add(new Player("blank",30));
        list.add(new Player("faker",40));
        list.add(new Player("bang",50));
        list.add(new Player("wolf",60));

        //传统用匿名内部类的方法
        Collections.sort(list, new Comparator<Player>() {
            @Override
            public int compare(Player player1, Player player2) {
                return player1.getAge()-player2.getAge();
            }
        });
        for (Player player :list){
            System.out.println("SKT队员:"+player);
        }

        //用lambda表达式
        Comparator<Player> comparatorByAge =(Player player1,Player player2) -> (player2.getAge()-player1.getAge());
        Collections.sort(list,comparatorByAge);
//        Arrays.sort(list,comparatorByAge);
//        Arrays.sort(list,(Player player1,Player player2) -> (player2.getAge()-player1.getAge()));
        list.forEach((player -> System.out.println("用lambda输出:"+player)));
        list.forEach(System.out::println);

        //用forEach把所有队员的年龄加1
        Consumer<Player> giveRaise = e -> e.setAge(e.getAge()+1);
        list.forEach(giveRaise);
        //用filter筛选
        list.stream()
                .filter(player -> (player.getAge()>30))
                .forEach(player -> System.out.println("用filter筛选"+player) );
        //定义filter
        Predicate<Player> ageFilter = e -> e.getAge()>40;
        Predicate<Player> nameFilter = e ->e.getName().equalsIgnoreCase("Faker");
        list.stream()
                .filter(ageFilter)
                .filter(nameFilter)
                .forEach(player -> System.out.println("定义filter"+player));
        //使用limit限制结果集的个数
        list.stream()
                .limit(3)
                .forEach(player -> System.out.println("使用limit限制"+player));

        //使用stream的sorted方法排序
        List<Player> sortedPlayer =list
                .stream()
                .sorted((p1,p2) -> (p1.getName().compareTo(p2.getName())))
                .collect(Collectors.toList());
        sortedPlayer.forEach(player -> System.out.println("sorted排序后:"+player));

        //使用min获取年龄最小的
        Player minAgePlayer = list
                .stream()
                .min((p1,p2) -> (p1.getAge()-p2.getAge()))
                .get();
        System.out.println("年龄最小的队员是:"+minAgePlayer);

        //使用map方法封装结果集
        String playerName = list
                .stream()
                .map(Player::getName)
                .collect(Collectors.joining(";"));
        System.out.println("所有队员的名字:"+playerName);
        //使用SummaryStatistics获得stream中元素的汇总数据
        IntSummaryStatistics summaryStatistics = list
                .stream()
                .mapToInt(p -> p.getAge())
                .summaryStatistics();
        System.out.println("队员的平均年龄:"+summaryStatistics.getAverage());
        System.out.println("队员的最大年龄:"+summaryStatistics.getMax());
        System.out.println("队员的数量:"+summaryStatistics.getCount());
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值