獲取流對象
獲取單列集合,雙列集合,數組的流對象
單列集合獲取流對象:
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();
}
}