时间有点仓促,将来及添加各部分详细说明。。。
1 public class StreamNotes { 2 public static void main(String[] args) { 3 /* 4 * 1、Stream的建立 5 * 一、Stream.of()方法能够接收可变参数、数组、列表 6 * 二、Array.stream(array, from, to)方法能够将array切片后的流 7 * 三、Stream.empty()方法返回一个空流 8 * 四、Collector.stream(),任何列表均可以经过stream()方法建立 9 * 五、Stream.generate()方法用于建立无限流,其接收一个供给型函数式接口的引元 10 * 六、Stream.iterate()方法接收2个参数,种子和f(x) 11 */ 12 13 /* 14 * 2、Stream管道 15 * 一、过滤 filter 16 * 二、转换 map 17 * 三、合并 flatMap 18 * 四、抽取 limit skip peek 19 * 五、连接 concat 20 */ 21 22 /* 23 * 3、收集结果 24 * 一、toArray()方法返回Object数组,若要返回指定类型数组,需传入构造器引用,如String::new 25 * 二、Collectors.toList()/toSet()方法返回列表/集合 26 * 三、Collectors.toCollector()方法接收构造器引用,来获取指定列表类型,如TreeSet::new 27 * 四、Collectors.joining()方法返回指定分隔符链接后的字符串 28 * 五、Collectors.summarizingInt|Long|Double()方法返回包含(最大值、最小值、平均值、求和)的 29 * (Int|Long|Double)SummaryStatistic对象,能够经过getMax()、getMin()...方法获取相应的值 30 */ 31 32 /* 33 * 4、收集结果到映射表 toMap() 34 * 一、两个引元:两个引元分别表明Map的键和值,简单转化为Map 35 * 二、三个引元:当值存在冲突时,引入第三引元,来完成值的消重或收集操做 36 * 三、四个引元:指定集合类型 37 */ 38 People[] people = { 39 new People("张", "飞", "男", 37), 40 new People("张", "三", "男", 30), 41 new People("李", "四", "男", 28), 42 new People("孙", "越", "女", 35) 43 }; 44 Map<String, People> peopleMap = Stream.of(people). 45 collect(Collectors.toMap( 46 /* 前两个引元,提供键值对 */ People::getSurName, Function.identity(), 47 /* 第三个引元,消除重复值 */ (x, y) -> y, // 也能够建立集合,将重复值收集起来 48 /* 第四个引元,指定映射表 */ HashMap::new)); 49 System.out.println(peopleMap.get("张")); 50 51 /* 52 * 5、约简(终止操做) 53 * 一、count() 54 * 二、max() min() 55 * 三、findFirst() findAny() 56 * 四、anyMatch、allMatch()、noneMatch() 57 * 五、reduce() 58 */ 59 60 /* 61 * 6、Optional对象的建立和使用 62 * 一、说明:Optional对象对结果进行包装,以防止对null引用 63 * 二、建立:of()、empty()、ofNullable() 64 * 三、使用: 65 * ①orElse(),结果为null时,指定一个默认值 66 * ②orElseGet(),经过给定函数来计算默认值 67 * ③orElseThrow(),没有任何值时抛出异常 68 * ④ifPresent(),当值存在时,对值进行操做 69 * ⑤ifPresent()没法对返回值进行操做,若须要操做返回值,则直接使用map() 70 */ 71 72 /* 73 * 7、群组和分区与下游收集器 74 * 一、groupingBy() 75 * ①单引元,根据给定函数返回的关键字,将流进行分组 76 * ②经过Collectors提供的工厂方法,完成对分组后数据的收集或求值 77 * ③求值时,若传入函数没法完成匹配时,需利用mapping完成操做 78 * 二、partitioningBy 79 */ 80 81 /* 82 * 8、基本类型流 IntStream、LongStream、DoubleStream 83 * 一、对象流与基本类型流的互相转换 84 * 二、基本类型流的特有约简操做 85 * 三、toArray()方法返回对应的基本类型数组 86 * 四、summaryStatistic()方法返回对应的Int|Long|DoubleSummaryStatistic对象 87 */ 88 89 /* 90 * 9、并发流(略)ParallelStream 91 * 没细看,留待之后跟并发一块儿总结 92 */ 93 94 } 95 }
示例中People类数组
public class People { private final String surName; private String lastName; private final String sex; private int age; private boolean isEmployed = false; public People(String surName, String lastName, String sex, int age) { this.surName = surName; this.lastName = lastName; this.sex = sex; this.age = age; } public People() { surName = ""; lastName = "老妖"; sex = "太监"; age = 1000; } public String getSurName() { return surName; } public String getLastName() { return lastName; } public String getSex() { return sex; } public int getAge() { return age; } public boolean isEmployed() { return isEmployed; } public void setEmployed(boolean employed) { isEmployed = employed; } @Override public String toString() { String job = isEmployed ? "在职" : "待业"; return surName + lastName + ":" + sex + " " + age + "岁 " + job; } public static void main(String[] args) { var p1 = new People("华", "罗庚", "男", 100); // p.setEmployed(true); var p2 = new People(); System.out.println(p1 + "\n" + p2); } }