首页 > 其他分享 >Lambda 表达式

Lambda 表达式

时间:2023-11-04 16:25:46浏览次数:35  
标签:String list Person add new public 表达式 Lambda

Lambda 表达式

参考文档:

Lambda

使用场景 Lambda 只能使用在函数式接口,​

什么是函数式接口:就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转换为Lambda表达式。Lambda表达式和方法引用(实际上也可以认为是Lambda表达式)

interface MyInterface {	// 函数式接口: 一个接口里面只有一个方法(并且这个方法是抽象的)
    int show(int i, int k);
}

旧的接口实现

MyInterface m = new MyInterface() {
    @Override
    public int show(int i, int k) {
        return 0;
    }
};
m.show(1, 1);

Lambda接口实现

MyInterface m = (k, v) -> {
    return k + v;
};
m.show(1, 1);

“::”方法引用

方法引用:方法引用可以理解为Lambda表达式的另外一种表现形式。

案例准备

public class Person {

    private String name;
    private String age;

    public Person() {
    }

    public Person(String name, String age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }

    public static int compare(Person a, Person b) {
        int i = a.getAge().compareTo(b.getAge());
        if (i != 0) {
            return i;
        } else {
            return a.getName().compareTo(b.getName());
        }
    }
    public static int compare(Person a, Person b, Person c) {
        return 0;
    }
	// static 属于 class 不属于 对象

    public Person concat(Person b) {
        this.setName(this.getName() + "," + b.getName());
        System.out.println(this);
        return this;
    }

}

五种实现方式

实现一:方法引用写法,调用 static 静态方法,参数类型动态推断

@Test
public void test() {

    List<Person> list = new ArrayList<>();
    list.add(new Person("liu", "1"));
    list.add(new Person("zong", "2"));
    list.add(new Person("lin", "3"));

    // 传统写法
    list.sort(new Comparator<Person>() {
        @Override
        public int compare(Person o1, Person o2) {
            return 0;
        }
    });
    // lambda
    list.sort((a, b) -> Person.compare(a, b));

    // 方法引用写法,调用 static 静态方法,参数类型动态推断
    list.sort(Person::compare);
    System.out.println(list);
}

实现二:stream 留处理

@Test
public void test1() {
    List<Person> list = new ArrayList<>();
    list.add(new Person("liu", "1"));
    list.add(new Person("zong", "2"));
    list.add(new Person("lin", "3"));
    list.stream().sorted(Person::compare).forEach(person -> System.out.println(person));
    list.stream().sorted(Person::compare).forEach(System.out::println);
}

实现三:调用对象方法

@Test
public void test2() {
    List<Person> list = new ArrayList<>();
    list.add(new Person("liu", "1"));
    list.add(new Person("zong", "2"));
    list.add(new Person("lin", "3"));
    Person a = new Person("liuzonglin", "1");
    list.stream().sorted(Person::compare).forEach(a::concat);
}

实现四::: new 实例化对象

@Test
public void test3() {
    // stream 留处理

    List<Person> list = new ArrayList<>();
    list.add(new Person("liu", "1"));
    list.add(new Person("zong", "2"));
    list.add(new Person("lin", "3"));
    Person a = new Person("liuzonglin", "1");
    list.stream().sorted(Person::compare).collect(Collectors.toList());
    list.stream().sorted(Person::compare).collect(Collectors.toCollection(ArrayList::new));

}

实现五:代特定实例

@Test
public void test4() {
    String[] strings = {

      "liu", "zong", "lin"
    };
    // 传统写法
    Arrays.sort(strings, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return 0;
        }
    });
    // lambda
    Arrays.sort(strings, (a, b) -> a.compareToIgnoreCase(b));
    // :: 写法 String指代a
    Arrays.sort(strings, String::compareToIgnoreCase);

}

标签:String,list,Person,add,new,public,表达式,Lambda
From: https://www.cnblogs.com/liuzonglin/p/17724531.html

相关文章

  • Kotlin语言基础入门到熟悉:Lambda 表达式
    什么是Lambda表达式?Lambda表达式,其实就是匿名函数。而函数其实就是功能(function),匿名函数,就是匿名的功能代码了。在Kotlin当中,函数也是作为类型的一种出现的,尽管在当前的版本中,函数类型的灵活性还不如Python这样的语言,不过它也是可以被赋值和传递的,这主要就体现在Lambda表......
  • C# Lambda 分组排序问题(先对数据进行时间倒序排列,然后再按照某字符分组,在每个分组内再
    问题:先对数据进行时间倒序排列,然后再按照某字符分组,在每个分组内再按照某数字或字符正序排列解答:vardata=list.OrderByDescending(i=>i.Date).ToList();vargData=data.GroupBy(g=>g.code).Select(l=>l.OrderBy(i=>i.Step));varinvData=newList<IndexVM>();......
  • lambda,map,filter
    1.LambdaLambda函数是一种匿名函数,它可以在一行内定义,并通常用于需要简单函数的地方。Lambda函数使用lambda关键字后跟参数列表和冒号,然后在冒号后面定义函数的主体。例如:add=lambdax,y:x+yprint(add(2,3))#输出5Lambda函数通常用于传递给高阶函数(如map、filter......
  • Python 正则表达式(RegEx)指南
    正则表达式(RegEx)是一系列字符,形成了一个搜索模式。RegEx可用于检查字符串是否包含指定的搜索模式。RegEx模块Python中有一个内置的包叫做re,它可以用于处理正则表达式。导入re模块:importrePython中的RegEx,一旦导入了re模块,您就可以开始使用正则表达式了。示例:搜索......
  • Python 正则表达式(RegEx)指南
    正则表达式(RegEx)是一系列字符,形成了一个搜索模式。RegEx可用于检查字符串是否包含指定的搜索模式。RegEx模块Python中有一个内置的包叫做re,它可以用于处理正则表达式。导入re模块:importrePython中的RegEx,一旦导入了re模块,您就可以开始使用正则表达式了。示例:搜索......
  • 正则表达式语法大全
     正则表达式基本符号:^表示匹配字符串的开始位置(例外用在中括号中[]时,可以理解为取反,表示不匹配括号中字符串)$表示匹配字符串的结束位置*表示匹配零次到多次+表示匹配一次到多次(至少有一次)?表示匹配零次或一次.表示匹配单个字符|表示为或者,两项中取一项()......
  • 表达式
    后缀表达式后序遍历。遇到数字就入栈。遇到序号——栈顶和次栈顶出栈。计算顺序:次顶元素——操作符——栈顶元素。最后得到计算结果,计算入栈重复上述过程。......
  • Qt 中的正则表达式
    Qt中的正则表达式常用QRegExp类一、正则表达式的常用匹配符^test:匹配字符的开始[^test]:表示除t,e,s,t以外的字符$:表示匹配字符串的结束[0-9]:表示0到9之间的数字*:表示匹配前面的字符0次或多次,如a*表示匹配0次或多次a字符,[0-9]*表示匹配数字0次或多次+:匹配前面的......
  • 正则表达式
    1.1正则表达式的概念及演示在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则,我们可以验证用户输入的字符串是否匹配这个规则。先看一个不使用正则......
  • python__re模块&正则表达式*正则表达式练习题
    1、如下图是python中的re模块的讲解,已经正则表达式的基础知识2、python正则表达式训练题(网上找的,最后附上了地址)1.\d,\W,\s,\B,.,*,+,?分别是什么?\d:数字\W:非英文数字下划线的任意字符\s:任意空白字符\B:非单词开始或结尾的位置.表示非换行符的任意字符*表示匹配前面子表达式0次或多次......