中間操做主要是用來對Stream作出相應轉換及限制流,其實是將源Stream轉換爲一個新的Stream,以達到需求效果。java
操做 | 類型 | 返回類型 | 操做參數 | 函數描述符 | 做用 |
---|---|---|---|---|---|
filter | 中間 | Stream | Predicate | T -> boolean | 返回參數函數爲true的元素的流 |
map | 中間 | Stream | Function<T, R> | T -> R | 參數函數會被應用到每一個元素上,並將其映射成一個新的元素 |
flatMap | 中間 | Stream | Function<T, R> | T -> R | flatmap 方法讓你把一個流中的每一個值都換成另外一個流,而後把全部的流鏈接起來成爲一個流。 |
limit | 中間 | Stream | 返回前n個元素的流 | ||
skip | 中間 | Stream | 返回一個跳過前n個元素的流(不足n個元素,返回一個空流) | ||
sorted | 中間 | Stream | Comparator | (T, T) -> int | 按照傳入的Comparator安排續 |
distinct | 中間 | Stream | 根據流所生成元素的hashCode 和 equals 方法,實現去重後的流 |
使用實例:遍歷出相同的字符串數組
Stream.of("a", "a", "b")
.filter((s) -> s.startsWith("a"))
.forEach(System.out::println);
//return:"a","a"
複製代碼
相似的有:mapToDouble,mapToInt,mapToLong。 使用實例:求和處理函數
Stream.of(1, 1, 1)
.mapToInt(Integer::intValue)
.sum();
//return:3
複製代碼
Long l=Stream.of(1L,2L,4L)
.mapToLong(Long::longValue)
.sum();
//return:7
複製代碼
使用實例: 給 定 單 詞 列 表"Hello","World" ,你想要返回列表 "H","e","l", "o","W","r","d" ,作法就是先分割,在去重,返回字符串數組。spa
List<String> uniqueCharacters =
Stream.of("heelo","adafa")
.map(w -> w.split(""))
.flatMap(Arrays::stream)
.distinct()
.collect(Collectors.toList());
複製代碼
使用實例:取前n個元素code
Stream.of(1, 2, 3, 4, 5)
.limit(3)
.forEach(i -> System.out.println(i));
//return 1,2,3
複製代碼
使用實例:跳過前3個元素ip
Stream.of(1, 2, 3, 4, 5)
.skip(3)
.forEach(System.out::println);
//return 4,5
複製代碼
使用實例:去重操做字符串
Stream.of("a", "b", "c", "c")
.distinct()
.forEach(System.out::println);
//return:a,b,c
複製代碼