lambda表达式的常用方法

lambda表达式

1.1 格式

(参数列表)->{代码}

1.2 省略规则

  • 参数类型可以省略
  • 方法体只有一句代码时大括号return和唯一一句代码的分号可以省略
  • 方法只有一个参数时小括号可以省略

2 Stream流

  • Stream流使用的是函数式编程模式

  • 可以操纵数组和集合

2.1 常用操作

2.1.1 创建流
  • 单列集合:集合对象.stream()

    authors.stream()
    
  • 数组:Arrays.stream(数组)或者使用Stream.of来创建

    Integer[] arr = {1,2,3,4,5,6,7,8,8,7};
    Stream<Integer> stream = Arrays.stream(arr);
    Stream<Integer> stream = Stream.of(arr);
    
  • 双列集合:换成单列集合后在创建

    Map<String,Integer> map = new HashMap<>();
    map.put("a",1);
    
    Stream<Map.Entry<String,Integer>> stream = map.entrySet().stream();
    

2.2 中间操作

filter

​ 对流元素进行过滤

List<Author> authors = getAuthors();
authors.stream().filter(i -> i.getName().length() > 2).forEach(System.out::println);
map

​ 可以对流中的元素进行计算或者转换

List<Author> authors = getAuthors();
authors.stream().map(author->author.getName()).forEach(name->System.out.println(name));
distinct

​ 可以去除流当中的重复元素

Integer[] arr = {1,2,3,4,5,6,7,8,8,7};
Arrays.stream(arr).distinct().forEach(System.out::println);

​ **注意:**distinct方法是依赖Object的equals方法来判断是否是相同对象的。所以要注意重写equals方法

sorted

​ 对流中的元素排序

List<Author> authors = getAuthors();
authors.stream().sorted((o1, o2) -> o1.getAge() - o2.getAge()).forEach(System.out::println);

**注意:**如果调用空参的sorted()方法,需要对流中的元素实现Comparable接口

limit

​ 可以设置流的最大长度,超出的部分将被抛弃

List<Author> authors = getAuthors();
authors.stream().distinct().limit(2)
        .forEach(author -> System.out.println(author.getName()));
skip

​ 跳过流中的前n个元素,返回剩下的元素

flatMap

​ map只能把一个对象转换成另一个对象来作为流中的元素,而flatMap可以把一个对象编程多个对象作为流中的元素

List<Author> authors = getAuthors();
authors.stream().flatMap(new Function<Author, Stream<Book>>() {
    @Override
    public Stream<Book> apply(Author author) {
        return author.getBooks().stream();
    }
}).forEach(new Consumer<Book>() {
    @Override
    public void accept(Book book) {
        System.out.println(book.getName());
    }
});

2.3 终结操作

forEach

​ 对流中的元素进行遍历操作,我们通过传入的参数去指定对遍历到的元素进行什么具体的操作

count

​ 用来获取当前流中元素的个数

max&min

​ 用来获取流中的最值

collect

​ 把当前流转换成一个集合

查找和匹配
anyMatch

​ 可以用来判断是否有任意符合匹配条件的元素,结果为boolean类型

allMatch

​ 可以用来判断是否都符合匹配条件,结果为boolean类型,如果都符合结果为true,否则结果为false

noneMatch

​ 可以判断流中的元素是否都不符合匹配条件,如果都不符合为true

findAny

​ 获取流中的任意一个元素,该方法没有办法保证获取的一定是流中的第一个元素

findFirst

​ 获取流中的第一个元素

reduce归并

​ 对流中的数据按照你指定的计算方式计算出一个结果(缩减操作)

​ reduce的作用是吧stream中的元素给组合起来,我们可以传入一个初始值,它会按照我们的计算方式依次拿流中的元素和在初始化值的基础上进行计算,计算结果在和后面的元素计算

2.4 注意事项

  • 惰性求值

    如果没有终结操作,中间操作是不会得到执行的

  • L流是一次性的

    一旦一个流对象经过一个终结操作后,这个流就不能再被使用

  • 不会影响原数据

    我们在流中可以多数据做很多处理,但是正常情况下是不会影响原来集合中的元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值