java函数式编程Lambda基础 几Stream

匆匆过客 提交于 2020-04-05 20:42:25

java函数式编程Lambda基础

  • LambdaJava 8引入了Lambda语法,用以简化单抽象方法接口的实现
  • Lambda语法实现了类型自动推断
  • 只定义了单个(只有一个抽象方法)抽象方法接口被称为函数式接口,标注为@FunctionalInterface
    • 重写(继承的)的不算

方法引用

  • 如果某个方法签名和接口方法恰好一致(参数类型和返回类型): 可以直接传入方法引用列: String::compareTo
  1. 引用静态方法(参数列表类型和返回类型一致) Arrays.sort(its, Comparator.comparingInt(o -> o));
  2. 使用构造函数(构造参数和stream的泛型一致 并且 构造的类型是返回值的类型)
String str = "hello,word,test,os,";
List<String> strList = Arrays.asList(str.split(","));
strList.stream().map(Student::new).collect(Collectors.toList());

stream

创建

  1. String.of(1,2,3);
  2. Arrays.stream(list);
  3. list.stream(); map.stream()

map 通过元数据应生成一个新的stream

        String str = "hello,word,test,os,";
        List<String> strList = Arrays.asList(str.split(","));
        List<Student> stuList = strList.stream().map(Student::new).collect(Collectors.toList());

filter 是一个stream的转换方法, 把一个stream转换成另一个stream

reduce 聚合函数 第一个元素和后面的元素做计算的累计 例如:i = i + n; i = i - n; i = i * n;

排序 sorted();

去除重复 distinct()

limit() 截取多少元素

skip() 跳过多少元素

contact() 将两个stream合并成一个stream

flatMap 把元素映射为stream然后合并成一个新的stream : Stream<List<Integer>>

parallel 变成一个可以并行处理的stream,后续的操作可以并行操作

count 元素个数

min 最小元素

max 最大元素

sum 求和

average 求平均数

allMatch 是否所有匹配

forEach 循环

toArray 转换为Object数组

collect 可以换为list set等集合

code


import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class TestSort {


    public static void main(String[] args) {
        // 排序数组
        Integer[] its = {2, 3, 7, 4, 2, 1, 0, 8, 5, 9, 9, 9};
        Arrays.sort(its, Comparator.comparingInt(o -> o));
        Stream<Integer> stream = Stream.of(its);
        stream.forEach(System.out::print);

        System.out.println();
        // 数组去重 list去重
        List<Integer> list = Stream.of(its).distinct().collect(Collectors.toList());
        list.forEach(System.out::print);
        // map 通过元数据应生成一个新的stream
        String str = "hello,word,test,os,";
        List<String> strList = Arrays.asList(str.split(","));
//        Arrays.sort(strList, String::compareToIgnoreCase);

        List<Student> stuList = strList.stream().map(Student::new).collect(Collectors.toList());
        stuList.forEach(System.out::println);
        System.out.println("filter过滤:");
        List<Student> stuListFilter = strList.stream().filter((s) -> s.contains("t")).map(Student::new).collect(Collectors.toList());
        stuListFilter.forEach(System.out::println);

        System.out.println("使用reduce进行累加");
        Optional<Integer> sum = Stream.of(1, 2, 3).reduce((a, b) -> a + b);
        System.out.println(sum.get());

        System.out.println("stream sorted排序");
        List<Integer> b = Arrays.stream(its).sorted().collect(Collectors.toList());
        b.forEach(System.out::print);

    }
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!