【Java-8】java8簡單介紹Demo

package com.wjk.demo.test;

import java.util.*;
import java.util.stream.Collectors;

/**
 * java 8 新特性Demo-Stream
 * Stream(流)是一個來自數據源的元素隊列並支持聚合操作
 * 元素:是特定類型的對象,形成一個隊列。Java中的Stream並不會存儲元素,而是按需計算。
 * 數據源 :流的來源。可以是集合,數組,I/O channel,產生器generator等。
 * 聚合操作: 類似SQL語句一樣的操作,比如filter, map, reduce, find,match, sorted等。
 * 基本特性:1、PipeLining:中間操作都會返回流對象本身;
 * 2、內部迭代:以前對集合遍歷都是通過Iterator或者For-Each的方式,
        顯式的在集合外部進行迭代,這叫做外部迭代
 */
public class java8TestDemo {
    public static void main(String[] args) {

        //生成流,stream()-爲集合創建串行流,parallelStream()−爲集合創建並行流。
        /*List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl");
        List<String> filtered = strings.stream().
                filter(string -> !string.isEmpty()).collect(Collectors.toList());*/

        /**
         *   'forEach' 迭代流中的每個數據。使用forEach 輸出了10個隨機數
         *   limit 方法用於獲取指定數量的流。
         *   map 方法用於映射每個元素到對應的結果.
         *   filter 方法用於通過設置條件過濾出元素
         *   sorted 方法用於對流進行排序
         *   Collectors 類實現了很多歸約操作,例如將流轉換成集合和聚合元素。
        Collectors可用於返回列表或字符串:
         */
        // 'forEach' 來迭代流中的每個數據。使用forEach 輸出了隨機數,limit 方法用於限制數據數量
        //Random random = new Random();
        //random.ints(10,100).limit(10).forEach(System.out::println);

        //map 輸出了元素對應的平方數
        List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
        // 獲取對應的平方數
        List<Integer> squaresList = numbers.stream().
            map(i -> i * i).distinct().collect(Collectors.toList());
        //System.out.println(squaresList);

        //使用filter 方法過濾出空字符串:
        List<String> strs = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        int count = (int) strs.stream().filter(string -> string.isEmpty()).count();
        //System.out.println("空串數量"+count);

        //sorted 方法對輸出的 10 個隨機數進行排序
        Random random = new Random();
        //random.ints(20,100).limit(10).sorted().forEach(System.out::println);

        //將流轉換成集合和聚合元素。Collectors可用於返回列表或字符串:
        List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd", "", "jkl");
        List<String> filtered = strings.stream().
            filter(string -> !string.isEmpty()).collect(Collectors.toList());
        //System.out.println("篩選列表: " + filtered);
        String mergedString = strings.stream().
            filter(s -> !s.isEmpty()).collect(Collectors.joining(", "));
        //System.out.println("合併字符串: " + mergedString);


        List<Map<String,Object>> listMap = new ArrayList<>();
        for (int i=0;i<5;i++){
            Map<String, Object> map = new HashMap<>();
            map.put("x","1"+i);
            map.put("y","y"+i);
            listMap.add(map);
        }
        System.out.println(listMap);

        /**
         * 使用toMap()函數之後,返回的就是一個Map了,自然會需要key和value。
         toMap()的第一個參數就是用來生成key值的,第二個參數就是用來生成value值的。
         第三個參數用在key值衝突的情況下:如果新元素產生的key在Map中已經出現過了,
            第三個參數就會定義解決的辦法。
         */
        Map<String, String> map1 = listMap.stream().
        filter(s -> s.get("x").equals("10"))
                .collect(Collectors.
        toMap(s->(String)s.get("x"),s->(String)s.get("y"),(s1,s2)->s1));
        System.out.println(map1);


    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章