1. 函数式编程 Java有2类方法: 实例方法:通过实例调用 静态方法:通过类名调用 Java的方法相当于过程式语言的函数 函数式编程(Functional Programing): 把函数作为基本运算单元 函数可以作为变量,传递给另一个函数 函数可以接收函数 函数可以返回函数 历史研究函数式编程的理论是Lambda演算,所以把支持函数式编程的风格成为Lambda表达式 2. Java的单方法接口 在Java中,有许多接口只定义了1个方法: Comparator Runnable Callab…
1. Stream Java8引入全新的Stream API 位于java.util.stream包 1.1 Stream API不同于java.io的InputStream/OutputStream java.io java.util.stream 存储 顺序读写的byte/char 顺序输出的任一Java对象 用途 序列化数据至文件/网络 内存计算/业务逻辑 1.2 Stream和List也是不同的 List元素已经分配并存储在内存中的,而Stream输出的元素并没有预先存储在内存中,它通常…
1. 聚合方法 Stream.reduce()是一个Stream的聚合方法:把一个Stream的所有元素聚合成一个结果 例如: Stream.of(1, 2, 3, 4, 5).count(); //返回元素个数:5 2. reduce简介 reduce接收的对象是BinaryOperator接口,其定义了一个apply方法,负责把上次累加的结果和本次元素进行运算,并且返回累加的结果 Optional<T> reduce(BinaryOperator<T> accumulator)…
1.filter简介 Stream.filter()是一个转换方法,把一个Stream转换为另一个Stream. 所谓filter操作,就是对一个Stream的所有元素进行测试,不满足条件的元素就被过滤掉,剩下的元素构成了一个新的Stream 例如对{1, 2, 3, 4, 5}调用filter,传入的测试函数是f(x)=x%2,结果为1,就通过:否则不通过. 实现filter的代码 Stream<Integer> s = Stream.of(1, 2, 3, 4, 5); Stream<…
1. map()简介 Stream.map()是一个Stream的转换方法,把一个stream转换为另一个Stream,这2个Stream是按照映射函数一一对应的. 所谓map操作,就是把一种操作运算映射到序列的每个元素上. 例如:f(x)=x^2,对x计算它的平方,把这个函数映射到一个序列{1, 2, 3, 4, 5},就得到另一个序列{1, 4, 9, 16, 25}.这2个Stream是按照映射函数一一对应的 Stream<Integer> s = Stream.of(1, 2, 3,…
1. 排序 Stream<T> sorted(); //按元素默认大小排序(必须实现Comparable接口) Stream<T> sorted(Comparator<? super T> cp); //按指定Comparator比较的结果排序 public static void main(String[] args){ Stream<String> s = Stream.of("hello","JAVA",&quo…
1. 方法1:把一个现有的序列变为Stream,它的元素是固定的 //1.直接通过Stream.of()静态方法传入可变参数进行创建 Stream<Integer> s = Stream.of(1,2,3,4,5); //2.Arrays.stream(数组)把一个数组变为Stream Stream<Integer> s = Arrays.stream(theArray); //3.通过Collections的stream()方法,把任意的Collections(例如List,Se…
Java8引入了Lambda表达式,可以不必编写FunctionalInterface的实现类,直接写Lambda表达式.除了Lambda表达式,我们还可以直接传入方法引用 方法引用是指:如果某个方法签名和接口恰好一致,可以直接传入方法引用,格式:类名::方法名 静态方法引用 在SortedBy这个类中定义了一个静态方法,其方法签名是传入2个String,返回int. class SortedBy{ static int nameIgnoreCase(String s1, String s2){…
函数名也是变量: >>> f = abs >>> f(-10) 10 然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数 def add(x, y, f): return f(x) + f(y) x ==> -5 y ==> 6 f ==> abs f(x) + f(y) ==> abs(-5) + abs(6) ==> 11 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就…
1.JDK提供的InputStream分为两类: 直接提供数据的InputStream * FileInputStream:从文件读取 * ServletInputStream:从HTTP请求读取数据 * Socket.getInputStream():从TCP连接读取数据 提供额外附加功能的FilterInputStream * 如果要给FileInputStream添加缓冲功能: BufferedFileInputStream extends FileInputStream * 如果要给Fi…