Stream使用一種類似用SQL語句從資料庫查詢資料的直觀方式來提供一種對Java集合運算和表達的高階抽象。接下來透過本文來跟大家分享java8中的Stream資料流知識,有興趣的朋友一起看看吧
Stream是java8引入的一個重度使用lambda表達式的API。 Stream使用一種類似用SQL語句從資料庫查詢資料的直觀方式來提供一個對Java集合運算和表達的高階抽象。直觀意味著開發者在寫程式碼時只需專注於他們想要的結果是什麼而無需關注實現結果的具體方式。在這一章中,我們將介紹為什麼我們需要一個新的資料處理API、Collection和Stream的不同之處以及如何將StreamAPI應用到我們的編碼中。
篩選重複的元素
Stream 介面支援distinct 的方法,它會傳回一個元素(根據流所產生元素的hashCode和equals方法實現)的流。
例如,以下程式碼會篩選出清單中所有的偶數,並確保沒有 重複。
List<Dish> dishes = Dish.menu.stream() .filter(Dish::isVegetarian) .collect(Collectors.toList());
跳過指定數量的元素
Stream 支援skip(n) 方法,傳回一個丟掉了前n個元素的流。如果流中元素不足n個,則傳回一 個空流。 limit(n) 和 skip(n) 是互補的
List<Dish> dishSkip = Dish.menu.stream().filter(d -> d.getCalories() > 300).skip(2) //去掉符合要求的集合中的前2个元素后返回 .collect(Collectors.toList()); dishSkip.forEach(System.out::println);
map 操作
Stream 支援 map 方法,它會接受一個函數作為參數。這個函數會被應用到每個元素上,並將其映射成一個新的元素
List<String> list = st.skip(0).limit(2).map(s->s.toUpperCase()).collect(Collectors.toList());
元素求和
List<Integer> numbers = Arrays.asList(3,4,5,1,2); int sum1 = numbers.stream().reduce(0,(a, b) -> a + b); System.out.println(sum1); int sum2 = numbers.stream().reduce(0,Integer::sum); System.out.println(sum2);
最大
int max = numbers.stream().reduce(0,Integer::max); System.out.println(max);
最小值
##
//reduce不接受初始值,返回一个Optional对象(考虑流中没有任何元素的情况) Optional<Integer> min = numbers.stream().reduce(Integer::min); min.ifPresent(System.out::println);
總結
以上是Java8中的Stream資料流的實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!