java8 lambda表达式 List篇

1.获取实体内某个元素放入list集合中
List<String> ids = caseinfos.parallelStream().map(Caseinfo::getId).collect(Collectors.toList());
List<String> ids = caseinfos.parallelStream().map(a -> a.getId()).collect(Collectors.toList());
2.list排序
List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");
myList.sort((a, b) -> b.compareTo(a));
myList.sort(Comparator.reverseOrder());
[c2, c1, b1, a2, a1]
3.字符串变大写并排序
stringCollection.stream().map(String::toUpperCase).sorted((a, b) -> b.compareTo(a)).forEach(System.out::println);
4.验证 list 中 string 是否有以 a 开头的, 匹配到第一个,即返回 true
boolean anyStartsWithA =
    stringCollection.stream().anyMatch((s) -> s.startsWith("a"));
5.验证 list 中 string 是否都是以 a 开头的
boolean allStartsWithA =
    stringCollection.stream().allMatch((s) -> s.startsWith("a"));
6.验证 list 中 string 是否都不是以 z 开头的
boolean noneStartsWithZ =
    stringCollection.stream().noneMatch((s) -> s.startsWith("z"));
7.验证 list 中 string 以 b 开头的元素数量
long startsWithB =
    stringCollection.stream().filter((s) -> s.startsWith("b")).count();
8.排序
	List<String> myList = Arrays.asList("a1", "a2", "b1", "c2", "c1");

    myList.stream() // 创建流
                .filter(s -> s.startsWith("c")) // 执行过滤,过滤出以 c 为前缀的字符串
                .map(String::toUpperCase) // 转换成大写
                .sorted(Comparator.naturalOrder()) // 排序
                .forEach(System.out::println); // for 循环打印
                
	int[] arr = {1, 5, 9, 7, 2, 3, 7, -1, 0, 3};
    arr = IntStream.of(arr).boxed().sorted(Comparator.reverseOrder()).mapToInt(Integer::intValue).toArray();
    System.out.println(Arrays.toString(arr));
C1
C2
[9, 7, 7, 5, 3, 3, 2, 1, 0, -1]
9.list转Map
  • (k1, k2) -> k2表示key相等时,新的值会覆盖旧的值
Map<String, String> deptMap = departments.parallelStream()
.collect(Collectors.toMap(Department::getGridNo, Department::getDeptCode, (k1, k2) -> k2));
Map<String, Department> deptMap = departments.parallelStream()
.collect(Collectors.toMap(Department::getGridNo, Function.identity(),(k1, k2) -> k2));
10.分组排序
public class Staff {

    private int age;
    private String name;
    private String type;

    public Staff() {
    }

    public Staff(int age, String name, String type) {
        this.age = age;
        this.name = name;
        this.type = type;
    }

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

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

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}
 Map<String,List<Staff>> groupStaffs = staffs.stream()
                .sorted((a, b) -> b.getAge()-a.getAge()).collect(Collectors.groupingBy(s -> s.getType()));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Lambda 表达式是 Java 8 中引入的一种新的语法,它允许你在不用创建独立函数的情况下直接提供函数式接口的实现。Lambda 表达式的语法格式如下: ``` (parameters) -> expression 或 (parameters) -> { statements; } ``` Lambda 表达式有以下几个部分: - 参数列表:小括号内的参数列表,参数的类型可以省略,因为编译器可以从上下文中推断出来。如果没有参数,则使用空的小括号。 - 箭头符号:箭头符号 -> 表示这是一个 Lambda 表达式。 - 函数体:在箭头后面的表达式或代码块。如果 Lambda 表达式只有一行,则可以省略大括号。 举个例子,假设你要实现一个函数式接口,该接口只有一个抽象方法,它接受两个整型参数并返回一个整型值,你可以使用 Lambda 表达式来实现这个接口: ```java IntBinaryOperator add = (x, y) -> x + y; ``` Lambda 表达式的优点在于它可以让代码更简洁,使用起来也更方便。你可以使用 Lambda 表达式来简化常见的模式,例如创建并返回一个匿名内部类的实例。 ```java ### 回答2: Java 8引入了lambda表达式,它是一种更简洁、更灵活的函数式编程方式。lambda表达式可以作为方法参数传递和返回值,使得编写代码更加简洁和易读。 lambda表达式由三个部分组成:参数列表、箭头符号和表达式主体。参数列表指定了方法需要的参数,箭头符号"->"将参数列表与表达式主体分开,表达式主体是具体实现的代码。 使用lambda表达式可以避免定义匿名内部类来实现接口的繁琐过程。例如,如果需要排序一个整型列表,以前需要创建一个实现Comparator接口的匿名内部类,而现在可以使用lambda表达式来达到同样的效果。以下是一个使用lambda表达式实现排序的示例: List<Integer> list = Arrays.asList(5, 2, 8, 1, 9); Collections.sort(list,(a,b) -> a.compareTo(b)); 这个例子中的lambda表达式接受两个参数a和b,并使用a.compareTo(b)来比较它们的大小。这样,我们就实现了对整型列表的排序。 此外,lambda表达式还可以结合函数式接口一起使用。函数式接口是只有一个抽象方法的接口,可以直接使用lambda表达式作为其实现。例如,Runnable接口和Comparator接口都是函数式接口,可以使用lambda表达式来实现它们的抽象方法。 总之,Java 8的lambda表达式为开发者提供了一种更加简洁、灵活的编程方式。它使得代码变得更加易读和易写,提高了开发效率。通过结合函数式接口的使用,可以更好地利用lambda表达式的优势。 ### 回答3: Java 8引入了lambda表达式,作为一种简化代码的方式。lambda表达式可以将函数作为方法的参数进行传递,使得Java具备函数式编程的特性。 使用lambda表达式可以减少冗余代码,提高代码的可读性和可维护性。它可以代替传统的匿名类和内部类的写法,使得代码更加简洁明了。使用lambda表达式可以更加直观地表达代码的意图,减少了代码的额外开销。 lambda表达式的语法结构为 (parameters) -> expression 或者 (parameters) -> {statements;}。其中parameters是方法的参数,expression是方法的返回值,statements是方法体。 lambda表达式的优点是可以简化代码,特别是在处理集合和迭代器时非常方便。它可以用于替代传统的foreach循环,通过简单的语法实现对集合元素的操作。 例如,可以使用lambda表达式对集合进行排序、过滤、映射等操作,而不需要写繁琐的循环体和条件判断语句。 另一个优点是支持并行处理,可以通过并行流的方式利用多核处理器的能力提高程序的性能。 然而,lambda表达式也有一些局限性。它只能用于函数式接口,即只能有一个抽象方法的接口。对于多个抽象方法的接口,需要使用匿名类或内部类。 另外,lambda表达式在复杂的逻辑和控制流程的处理上相对不够灵活,还需要借助其他语法元素来完成。此外,由于Java是一门静态类型语言,lambda表达式对参数类型的推断有一定的限制。 总之,Java 8的lambda表达式为我们带来了更加简洁高效的编程方式,可以优化代码结构、提高可读性,并且通过并行处理提升程序性能。但是在应用时需要注意其适用范围和局限性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值