獲取單列集合,雙列集合,數組的Stream流對象以及簡單操作


獲取流對象

獲取單列集合,雙列集合,數組的流對象

單列集合獲取流對象:

1、java.util.Collection接口中加入了default方法stream()獲取流對象,因此其所有實現類均可通過此方式獲取流。

public class StreamTest01 {
    List<String> list = new ArrayList<>();
    Stream<String> stream1 = list.stream();
    Set<String> set = new HashSet<>();
    Stream<String> stream2 = set.stream();
}

雙列集合獲取流對象

2、java.util.Map接口想要獲取流,先通過keySet()、values()或entrySet()方法獲取鍵、值或鍵值對的單列集合,再通過stream()獲取流對象。

public class StreamTest01 {
  Map<String, String> map = new HashMap<>();
  Stream<String> keyStream = map.keySet().stream();
  Stream<String> valueStream = map.values().stream();
  Stream<Map.Entry<String,String>>entryStream = map.entrySet().stream();
}

數組獲取流對象

數組獲取流,使用Stream接口中的的靜態方法of(T...values)獲取流

public class StreamTest01 {
  String[] array = {"東邪", "西毒", "南帝", "北丐", "中神通"};
  Stream<String> stream = Stream.of(array);
}

filter過濾,結果收集(數組)

/**
 * 需求
 * 過濾:filter、結果收集(數組)
 * 問題:
 * 有如下7個元素黃葯師,馮蘅,郭靖,黃蓉,郭芙,郭襄,郭破虜,使用Stream將以郭字開頭的元素存入新數組
 */
public class StremFilterTest_Array {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("黃葯師", "馮蘅", "郭靖", "黃蓉", "郭芙", "郭襄", "郭破虜");
        //使用Stream將以郭字開頭的元素存入新數組
        String[] gous = stream.filter(t -> t.startsWith("郭")).toArray(String[]::new);
        System.out.println(gous[0]);
    }
}

取用前幾個:limit、跳過前幾個:skip、 forEach: 循環消費

/**
 * 需求:
 * 已知ArrayList集合中有如下元素{陳玄風、梅超風、陸乘風、曲靈風、武眠風、馮默風、羅玉風},使用Stream
 * 1、取出前2個元素並在控制台打印輸出。
 * 2、取出后2個元素並在控制台打印輸出
 */
public class Limit_Skip {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("陳玄風");
        list.add("梅超風");
        list.add("陸乘風");
        list.add("曲靈風");
        list.add("武眠風");
        list.add("馮默風");
        list.add("羅玉風");
        list.stream().limit(2).forEach(System.out::println);
        list.stream().skip(list.size() - 2).forEach(System.out::println);
    }
}

映射:map、 逐一消費:forEach

/**
 * 需求:
 * 有如下整數1,-2,-3,4,-5
 * 使用Stream取元素絕對值並打印
 */
public class Map_ForEach {
    public static void main(String[] args) {
        Stream<Integer> stream = Stream.of(1, -2, -3, 4,-5);
        stream.map(Math::abs).forEach(System.out::println);
    }
}

組合:concat、 結果收集(list)

/**
 * 需求:
 * 已知數組arr1中有如下元素{郭靖,楊康},arr2中有如下元素{黃蓉,穆念慈},使用Stream將二者合並到List集合
 */
public class Concat_List {
    public static void main(String[] args) {
        Stream<String> streamA = Stream.of("郭靖", "楊康");
        Stream<String> streamB = Stream.of("黃蓉", "穆念慈");
        List<String> strList = Stream.concat(streamA, streamB).collect(Collectors.toList());
    }
}

獲取並發流

parallelSteam: 是一個並行流,多管道流

Stram:是一個單管道的流

二者區別:parallelSteam的處理效率比Stram的高

public class ParallelStream {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        Stream<String> parallelStream1 = coll.parallelStream();
        Stream<Integer> parallelStream2 = Stream.of(100, 200, 300, 400).parallel();
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM