美文网首页
lambda常见用法

lambda常见用法

作者: 夜霸槽 | 来源:发表于2019-04-08 19:59 被阅读0次
        //老的写法
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello World");
            }
        }).run();

       //新的写法
        new Thread(
                () -> System.out.println("lambda:hello world")
        ).run();

1. -> 替代了 类名、方法名 前提:函数接口

/**
 * 函数式接口是指内部只有一个抽象方法的接口
 */
public interface MyInterface {
    int add(int a ,int b);
}
//老的写法
MyInterface myInterface1 = new MyInterface() {
            @Override
            public int add(int a, int b) {
                return a + b;
            }
        };
 //新的写法,括号里面是参数
 MyInterface myInterface2 = (a, b) -> a+b;

2. 在集合中的应用

       // 在 ArrayList的应用
        List<Integer> idList = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));
        idList.forEach(new Consumer<Integer>() {
            @Override
            public void accept(Integer i) {
                System.out.println(i);
            }
        });

        idList.forEach((i)-> System.out.println("lambda:"+i));

        //Map 中的应用
        Map<String,String> map = new HashMap<>();
        map.put("a","1");
        map.put("b","2");
        map.put("c","3");
        map.forEach((k,v)-> System.out.println("lambda: k:"+k + "  v:"+v));

3.stream()

@Data
public class Student {

    private String name;
    private String sex;

    public Student(String name,String sex){
        this.name = name;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return name + " : " + sex;
    }
}
        // 得到stream:Collection.stream()、Arrays.stream(T[] array)
        // 1.中间操作  distinct() filter()  map() 等
        // 2.结束操作 collect() forEach() 等
        Student student1 = new Student("zhao","male");
        Student student2 = new Student("qian","male");
        Student student3 = new Student("sun","male");
        Student student4 = new Student("li","female");
        List<Student> list = new ArrayList<>(Arrays.asList(student1,student2,student3,student4));

        // 比如 获取 学生的姓名 的list   Student::getName 方法的等同于student -> {return student.getName(); })
        List<String> nameList = list.stream().map(Student::getName).collect(Collectors.toList());
        System.out.println(nameList);

        // 比如 生成一个 学生姓名 + student的 map   Function.identity() 代表对象本身
        Map<String,Student> map =  list.stream().collect(Collectors.toMap(Student::getName, Function.identity()));
        System.out.println(map);

        // groupBy 按性别归类学生
        Map<String,List<Student>> sexAndStudentMap = list.stream().collect(Collectors.groupingBy(Student::getSex));
        System.out.println(sexAndStudentMap);
        Map<String,List<String>> sexAndNameMap = list.stream().collect(Collectors.groupingBy(Student::getSex,
                Collectors.mapping(Student::getName,Collectors.toList())));
        System.out.println(sexAndNameMap);

以上是常用的一些场景,关于具体的一些操作,可查看原代码上的注释,一般都会有示例,例如:
image.png

参考资料:https://github.com/CarpenterLee/JavaLambdaInternals

相关文章

  • lambda常见用法

    1. -> 替代了 类名、方法名 前提:函数接口 2. 在集合中的应用 3.stream() 以上是常用的一些场...

  • Java 8:一文掌握 Lambda 表达式

    本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并...

  • Java 8:一文掌握 Lambda 表达式

    本文将介绍 Java 8 新增的 Lambda 表达式,包括 Lambda 表达式的常见用法以及方法引用的用法,并...

  • Lambda常见用法总结

    一、Lambda优化以下问题 1.解决原有匿名内部类语法冗余问题 2.解决作用域指向不明确问题 3.解决多余代码产...

  • python技巧-lambda函数使用

    通常写法: lambda用法1: lambda用法2:

  • C++ lambda表达式

    lambda表达式 目录 一、开篇 二、lambda初识 三、lambda基本用法 四、lambda表达式捕获列表...

  • python高阶函数

    一、lambda表达式 用法: lambda 参数列表:函数体 三元运算符 二、map函数 用法:map(函数,可...

  • lambda

    参考文献lambda的用法总结

  • Lambda用法

    Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个...

  • Java Lambda表达式之方法引用

    话接上篇,在上篇《Java Lambda表达式简介及入门》中我们介绍了lambda表达式的一些基本用法,在基本用法...

网友评论

      本文标题:lambda常见用法

      本文链接:https://www.haomeiwen.com/subject/inmbnttx.html