java8新特性(4)— Stream流
生活随笔
收集整理的這篇文章主要介紹了
java8新特性(4)— Stream流
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
java8新特性(4)— Stream流
遍歷集合更強大
package com.common.jdk8;import java.util.*; import java.util.stream.Collectors;//Java 8 API添加了一個新的抽象稱為流Stream,可以讓你以一種聲明的方式處理數(shù)據(jù)。 //Stream 使用一種類似用 SQL 語句從數(shù)據(jù)庫查詢數(shù)據(jù)的直觀方式來提供一種對 Java 集合運算和表達的高階抽象。 //Stream API可以極大提高Java程序員的生產力,讓程序員寫出高效率、干凈、簡潔的代碼。 //這種風格將要處理的元素集合看作一種流, 流在管道中傳輸, 并且可以在管道的節(jié)點上進行處理, 比如篩選, 排序,聚合等。 //元素流在管道中經(jīng)過中間操作(intermediate operation)的處理,最后由最終操作(terminal operation)得到前面處理的結果。 public class Jdk8Test4 {//什么是 Stream?//Stream(流)是一個來自數(shù)據(jù)源的元素隊列并支持聚合//元素是特定類型的對象,形成一個隊列。 Java中的Stream并不會存儲元素,而是按需計算。//數(shù)據(jù)源 流的來源。 可以是集合,數(shù)組,I/O channel, 產生器generator 等。//聚合操作 類似SQL語句一樣的操作, 比如filter, map, reduce, find, match, sorted等。//和以前的Collection操作不同, Stream操作還有兩個基礎的特征://Pipelining: 中間操作都會返回流對象本身。 這樣多個操作可以串聯(lián)成一個管道, 如同流式風格(fluent style)。 這樣做可以對操作進行優(yōu)化, 比如延遲執(zhí)行(laziness)和短路( short-circuiting)。//內部迭代: 以前對集合遍歷都是通過Iterator或者For-Each的方式, 顯式的在集合外部進行迭代, 這叫做外部迭代。 Stream提供了內部迭代的方式, 通過訪問者模式(Visitor)實現(xiàn)。public static void main(String args[]){System.out.println("使用 Java 7: ");// 計算空字符串List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");System.out.println("列表: " +strings);long count = getCountEmptyStringUsingJava7(strings);System.out.println("空字符數(shù)量為: " + count);count = getCountLength3UsingJava7(strings);System.out.println("字符串長度為 3 的數(shù)量為: " + count);// 刪除空字符串List<String> filtered = deleteEmptyStringsUsingJava7(strings);System.out.println("篩選后的列表: " + filtered);// 刪除空字符串,并使用逗號把它們合并起來String mergedString = getMergedStringUsingJava7(strings,", ");System.out.println("合并字符串: " + mergedString);List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);// 獲取列表元素平方數(shù)List<Integer> squaresList = getSquares(numbers);System.out.println("平方數(shù)列表: " + squaresList);List<Integer> integers = Arrays.asList(1,2,13,4,15,6,17,8,19);System.out.println("列表: " +integers);System.out.println("列表中最大的數(shù) : " + getMax(integers));System.out.println("列表中最小的數(shù) : " + getMin(integers));System.out.println("所有數(shù)之和 : " + getSum(integers));System.out.println("平均數(shù) : " + getAverage(integers));System.out.println("隨機數(shù): ");// 輸出10個隨機數(shù)Random random = new Random();for(int i=0; i < 10; i++){System.out.println(random.nextInt());}System.out.println("使用 Java 8: ");System.out.println("列表: " +strings);count = strings.stream().filter(string->string.isEmpty()).count();System.out.println("空字符串數(shù)量為: " + count);count = strings.stream().filter(string -> string.length() == 3).count();System.out.println("字符串長度為 3 的數(shù)量為: " + count);filtered = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.toList());System.out.println("篩選后的列表: " + filtered);mergedString = strings.stream().filter(string ->!string.isEmpty()).collect(Collectors.joining(", "));System.out.println("合并字符串: " + mergedString);squaresList = numbers.stream().map( i ->i*i).distinct().collect(Collectors.toList());System.out.println("Squares List: " + squaresList);System.out.println("列表: " +integers);IntSummaryStatistics stats = integers.stream().mapToInt((x) ->x).summaryStatistics();System.out.println("列表中最大的數(shù) : " + stats.getMax());System.out.println("列表中最小的數(shù) : " + stats.getMin());System.out.println("所有數(shù)之和 : " + stats.getSum());System.out.println("平均數(shù) : " + stats.getAverage());System.out.println("隨機數(shù): ");random.ints().limit(10).sorted().forEach(System.out::println);// 并行處理count = strings.parallelStream().filter(string -> string.isEmpty()).count();System.out.println("空字符串的數(shù)量為: " + count);}private static int getCountEmptyStringUsingJava7(List<String> strings){int count = 0;for(String string: strings){if(string.isEmpty()){count++;}}return count;}private static int getCountLength3UsingJava7(List<String> strings){int count = 0;for(String string: strings){if(string.length() == 3){count++;}}return count;}private static List<String> deleteEmptyStringsUsingJava7(List<String> strings){List<String> filteredList = new ArrayList<String>();for(String string: strings){if(!string.isEmpty()){filteredList.add(string);}}return filteredList;}private static String getMergedStringUsingJava7(List<String> strings, String separator){StringBuilder stringBuilder = new StringBuilder();for(String string: strings){if(!string.isEmpty()){stringBuilder.append(string);stringBuilder.append(separator);}}String mergedString = stringBuilder.toString();return mergedString.substring(0, mergedString.length()-2);}private static List<Integer> getSquares(List<Integer> numbers){List<Integer> squaresList = new ArrayList<Integer>();for(Integer number: numbers){Integer square = new Integer(number.intValue() * number.intValue());if(!squaresList.contains(square)){squaresList.add(square);}}return squaresList;}private static int getMax(List<Integer> numbers){int max = numbers.get(0);for(int i=1;i < numbers.size();i++){Integer number = numbers.get(i);if(number.intValue() > max){max = number.intValue();}}return max;}private static int getMin(List<Integer> numbers){int min = numbers.get(0);for(int i=1;i < numbers.size();i++){Integer number = numbers.get(i);if(number.intValue() < min){min = number.intValue();}}return min;}private static int getSum(List numbers){int sum = (int)(numbers.get(0));for(int i=1;i < numbers.size();i++){sum += (int)numbers.get(i);}return sum;}private static int getAverage(List<Integer> numbers){return getSum(numbers) / numbers.size();} }運行結果
使用 Java 7:列表: [abc, , bc, efg, abcd, , jkl]空字符數(shù)量為: 2字符串長度為 3 的數(shù)量為: 3篩選后的列表: [abc, bc, efg, abcd, jkl]合并字符串: abc, bc, efg, abcd, jkl平方數(shù)列表: [9, 4, 49, 25]列表: [1, 2, 13, 4, 15, 6, 17, 8, 19]列表中最大的數(shù) : 19列表中最小的數(shù) : 1所有數(shù)之和 : 85平均數(shù) : 9隨機數(shù):-8845067758448462981181770977-268099100-20767820571256561986802112096-859138137-194403122-1546201209使用 Java 8:列表: [abc, , bc, efg, abcd, , jkl]空字符串數(shù)量為: 2字符串長度為 3 的數(shù)量為: 3篩選后的列表: [abc, bc, efg, abcd, jkl]合并字符串: abc, bc, efg, abcd, jklSquares List: [9, 4, 49, 25]列表: [1, 2, 13, 4, 15, 6, 17, 8, 19]列表中最大的數(shù) : 19列表中最小的數(shù) : 1所有數(shù)之和 : 85平均數(shù) : 9.444444444444445隨機數(shù):-1118525426-847572210-632355909-447013487-1523942166699336748595529656337063410283633211283705449空字符串的數(shù)量為: 2總結
以上是生活随笔為你收集整理的java8新特性(4)— Stream流的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大连理工大学计算机原理实验,大连理工大学
- 下一篇: 记录---基于BigDecimal的特殊