码迷,mamicode.com
首页 > 其他好文 > 详细

Lambda表达式

时间:2019-05-14 14:57:00      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:.so   tar   抽象   slist   匿名   cost   print   run   修改   

1.函数式接口:只有一个抽象方法的接口叫函数式接口

存在的意义:方法里面不能直接传方法,所以通过传函数式接口的方式可以间接的实现方法的传递
lambda表达式:对匿名内部类的一种简单的写法常用于实现函数式接口

1.lambda实现Runnable

// Java 8 之前:
    new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Before Java8, too much code for too little to do");
    }
    }).start();
// Java 8 方式:
    new Thread(()->System.out.println("In Java8, Lambda expression rocks !!")).start();

2.lambda实现Compare

        List<Entry<Integer, User>> list = new ArrayList<>();
        for (Entry<Integer, User> entry: map.entrySet())
            list.add(entry);
        list.sort((Entry<Integer, User> o1, Entry<Integer, User> o2) -> {
            return o1.getValue().getAge() - o2.getValue().getAge();
        });

3.steam中Map的用法:对每个值做相应的操作

List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.","Canada");
String G7Countries = G7.stream().map(x -> x.toUpperCase()).collect(Collectors.joining(", "));

lambda表达式不能修改局部变量,但是可以访问

List<Integer> primes = Arrays.asList(new Integer[]{2, 3,5,7});
int factor = 2;
primes.forEach(element -> { factor++; }); // 错误
primes.forEach(element -> {System.out.println(2)}); // 正确

4.stream中的过滤并返回新的集合

// 创建一个字符串列表,每个字符串长度大于 2
List costBeforeTax = Arrays.asList("abc","bcd","defg","jk");
List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList()); // filter()过滤集合并返回stream,collect()返回集合
System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered);

Lambda表达式

标签:.so   tar   抽象   slist   匿名   cost   print   run   修改   

原文地址:https://www.cnblogs.com/zhz-8919/p/10861843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!