Java核心技術(卷二)讀書筆記之Java流庫(Stream)未整理

時間有點倉促,將來及添加各部分詳細說明。。。


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); } }
相關文章
相關標籤/搜索