java8新特性

java8新特性

一.函数型接口

1.什么是函数式接口

    确保接口中有且只有一个抽象方法即可   

2.常见的函数型接口

image.png

3.格式

修饰符 interface 接口名称 {
    [public abstract] 返回值类型 方法名称(可选参数信息);
                    // 其他 }

二.lambda表达式

1.什么是lambda表达式

Lambda 表达式是 Java8 语法新增最大的卖点,将函数式编程引入了Java,

允许把行为(代码) 看成数据,作为一个方法的实参。

2.特征

  1. 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  2. 可选的参数圆括号():一个参数无需定义圆括号,但多个参数需要定义圆括号()。
  3. 可选的大括号{}:如果主体包含了一个语句,就不需要使用{}。
  4. 可选的返回关键字return:如果主体只有一个表达式返回值则可以省略return和{}

3.使用lambda的前提

使用lambda的前提是必须是函数型接口 

三.什么是Stream

Stream API 是把函数式编程风格引入到 Java 自带 API 中。从语法上看

比较像链式编程,代码写起来简洁明了,可以根据需求对数据进行层层

处理(总结 : Stream是操作数据的一套工具,封装了对数据的各种操作,比如查找,过滤和映射(解决了原有的集合类的弊端) )

1.Stream创建方法

  • Collection的默认方法stream()和parallelStream()区别是一个是并行流一个不是

  • Arrays.stream()

  • Stream.of() 可变数组

  • Stream.iterate() (了解)

5)Stream.generate() (了解)

2.StringAPI

2.1筛选和切片

 filter(Predicate p):过滤(根据传入的Lambda返回的ture/false 从流中过滤掉某些数据(筛选出某些数据))
 distinct():去重(根据流中数据的 hashCode和 equals去除重复元素)
 limit(long n):限定保留n个数据
 skip(long n):跳过n个数据

2.2映射

map(Function f):接收一个函数作为参数,该函数会被应用到流中的每个元素上,并将其映射成一个新的元素。

flatMap(Function> mapper):接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流

2.3排序

sorted():自然排序使用 Comparable的int compareTo(T o)方法,默认的就是自然排序所以不用写

sorted(Comparator com):定制排序使用Comparator的 int compare(T o1, T o2)方法

2.4 查找匹配

     //1.allMatch:检查是否匹配所有元素
     //2.anyMatch:检查是否至少匹配一个元素
     //3.noneMatch:检查是否没有匹配的元素
     //4.findFirst:返回第一个元素(返回值为Optional)
     //5.findAny:返回当前流中的任意元素(一般用于并行流)

2.5 统计

     count():返回流中元素的总个数
     max(Comparator):返回流中最大值
     min(Comparator):返回流中最小值

2.6 汇总


collect(Collector):将流转换为其他形式。
```java
//        collect:将流转换为其他形式:list
        List integerList streamList.stream().collect(Collectors.toList());
        //案例
//        collect:将流转换为其他形式:set
        Set integerSet = streamList.stream().collect(Collectors.toSet());
        //案例
//        collect:将流转换为其他形式:TreeSet 如果没得选就自己new
        //案例
        TreeSet integerTreeSet = streamList.stream().collect(Collectors.toCollection(()-> new TreeSet<>()));

2.7分区和分组

Collectors.groupingBy() 对元素做 group 操作。分组--根据条件分成多个组
//案例
Map> collect = products.stream().collect(Collectors.groupingBy(p->p.getBrand()));

Collectors.partitioningBy()对元素进行二分区操作。分区--根据boolean条件分成两个区
//案例
Map> collect = products.stream().collect(Collectors.partitioningBy(p -> p.getPrice() > 1000));

## 四. 并发和并行

### 1.并发和并行的区别

- 并发是多个任务共享时间段(由CPU切换执行,就像是在同时执行)
- 并行是多个任务发生在同一时刻(真真正正的同时执行)(必须在多核CPU下)

### 2.什么是数据并行化

任务可以并行化执行,同样的数据也可以并行化处理

数据并行化是指将数据分成块,为每块数据分配单独的处理单元。也就是并行流

你可能感兴趣的:(java8新特性)