日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java8新特性(4)— Stream流

發(fā)布時間:2024/7/23 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java8新特性(4)— Stream流 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

java8新特性(4)— Stream流

遍歷集合更強(qiáng)大

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 集合運(yùn)算和表達(dá)的高階抽象。 //Stream API可以極大提高Java程序員的生產(chǎn)力,讓程序員寫出高效率、干凈、簡潔的代碼。 //這種風(fēng)格將要處理的元素集合看作一種流, 流在管道中傳輸, 并且可以在管道的節(jié)點(diǎn)上進(jìn)行處理, 比如篩選, 排序,聚合等。 //元素流在管道中經(jīng)過中間操作(intermediate operation)的處理,最后由最終操作(terminal operation)得到前面處理的結(jié)果。 public class Jdk8Test4 {//什么是 Stream?//Stream(流)是一個來自數(shù)據(jù)源的元素隊列并支持聚合//元素是特定類型的對象,形成一個隊列。 Java中的Stream并不會存儲元素,而是按需計算。//數(shù)據(jù)源 流的來源。 可以是集合,數(shù)組,I/O channel, 產(chǎn)生器generator 等。//聚合操作 類似SQL語句一樣的操作, 比如filter, map, reduce, find, match, sorted等。//和以前的Collection操作不同, Stream操作還有兩個基礎(chǔ)的特征://Pipelining: 中間操作都會返回流對象本身。 這樣多個操作可以串聯(lián)成一個管道, 如同流式風(fēng)格(fluent style)。 這樣做可以對操作進(jìn)行優(yōu)化, 比如延遲執(zhí)行(laziness)和短路( short-circuiting)。//內(nèi)部迭代: 以前對集合遍歷都是通過Iterator或者For-Each的方式, 顯式的在集合外部進(jìn)行迭代, 這叫做外部迭代。 Stream提供了內(nèi)部迭代的方式, 通過訪問者模式(Visitor)實(shí)現(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("隨機(jī)數(shù): ");// 輸出10個隨機(jī)數(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("空字符串?dāng)?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("隨機(jī)數(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();} }

運(yùn)行結(jié)果

使用 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隨機(jī)數(shù):-8845067758448462981181770977-268099100-20767820571256561986802112096-859138137-194403122-1546201209使用 Java 8:列表: [abc, , bc, efg, abcd, , jkl]空字符串?dāng)?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隨機(jī)數(shù):-1118525426-847572210-632355909-447013487-1523942166699336748595529656337063410283633211283705449空字符串的數(shù)量為: 2

總結(jié)

以上是生活随笔為你收集整理的java8新特性(4)— Stream流的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。