国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java8之Stream流代替For循環(huán)操作

Java8之Stream流代替For循環(huán)操作

2020-08-19 00:21菜鳥驛站 Java教程

這篇文章主要介紹了Java8之Stream流代替For循環(huán)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

Stream流代替For循環(huán)進(jìn)行輸出可以使代碼更簡潔。

需求:根據(jù)姓名獲取員工信息

1.建立實體類:Emp

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Emp {
 private String id;
 private String name;
 
 public Emp(String id, String name) {
 this.id=id;
 this.name=name;
 }
 public String getId() {
 return id;
 }
 public void setId(String id) {
 this.id = id;
 }
 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 @Override
 public String toString() {
 return "Emp信息: [id=" + id + ", name=" + name + "]";
 }

2.測試類:

(1.) 原始For寫法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
List<Emp> emps = new ArrayList<>();
 emps.add(new Emp("00101","張三"));
 emps.add(new Emp("00102","張四"));
 emps.add(new Emp("00103","張五"));
 emps.add(new Emp("00104","張六"));
 emps.add(new Emp("00105","張七"));
 
 for (Emp emp : emps) {
 if (emp.getName().equals("張三")) {
 System.out.println(emp);
 return;
 }
 }

(2.) Stream流:

?
1
2
3
4
5
6
7
8
9
10
List<Emp> emps = new ArrayList<>();
 emps.add(new Emp("00101","張三"));
 emps.add(new Emp("00102","張四"));
 emps.add(new Emp("00103","張五"));
 emps.add(new Emp("00104","張六"));
 emps.add(new Emp("00105","張七"));
 
 //filter()定義方法,toList()輸出為list
 List<Emp> emp=emps.stream().filter(e -> "張三".equals(e.getName())).collect(Collectors.toList());
 emp.forEach(System.out::println);

輸出結(jié)果為:

Java8之Stream流代替For循環(huán)操作

補充知識:java中for、foreach、stream性能比較

我們在開發(fā)中循環(huán)遍歷一個數(shù)組經(jīng)常會用到,jdk8推出了一些新特性,對循環(huán)做了比較,通過代碼親測,記錄一下!

1、for循環(huán)

?
1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String[] args) {
 Long startTime = System.currentTimeMillis();
 formMethod();
 Long endTime = System.currentTimeMillis();
 System.out.println("result:" + (endTime - startTime));
}
 
public static void formMethod(){
 for (int i = 0; i < 10000; i++) {
  System.out.println("start::::::::::::");
 }
 }

2、foreach循環(huán)(for循環(huán)的增強版)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void main(String[] args) {
 List<Integer> list = new ArrayList<Integer>();
 for (int i = 0; i < 10000; i++) {
  list.add(i);
 }
 Long startTime = System.currentTimeMillis();
 foreachMethod(list);
 Long endTime = System.currentTimeMillis();
 System.out.println("result:" + (endTime - startTime));
}
 
/**
* foreach
* @param list
*/
public static void foreachMethod(List<Integer> list){
 list.forEach(i ->{
  System.out.println("++++++++++++");
 });
}

結(jié)論:通過代碼測試發(fā)現(xiàn)在1萬以內(nèi)的數(shù)據(jù),for循環(huán)比foreach效率要高一些;但是10萬以內(nèi)數(shù)據(jù)的時候,foreach效率更高一些!

foreach [10萬數(shù)據(jù)時間 1112 1165 1203 1115] [1萬數(shù)據(jù) 235 146 176 164 175]

for循環(huán) [10萬數(shù)據(jù)時間 1330 1437 1347] [1萬數(shù)據(jù) 110 109 141]

3、stream api

(1)、串行處理,即同步處理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void main(String[] args) {
 List<Integer> list = new ArrayList<Integer>();
 for (int i = 0; i < 10000; i++) {
  list.add(i);
 }
 Long startTime = System.currentTimeMillis();
 streamMethod(list);
 Long endTime = System.currentTimeMillis();
 System.out.println("result:" + (endTime - startTime));
}
 
/**
* stream 串行處理
* @param list
*/
public static void streamMethod(List<Integer> list){
 list.stream().forEach(i ->{
  System.out.println("========");
 });
}

結(jié)論:1萬以內(nèi)的數(shù)據(jù),for循環(huán)的性能要高于foreach和stream;10萬以內(nèi)的數(shù)據(jù)明顯可以看出stream效率最高,其次foreach,最后是for。

[10萬數(shù)據(jù)時間 854 892 789 844][1萬數(shù)據(jù) 172 156 219 172 171]

(2)并行處理,即stream api提供了異步處理機制

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {
 List<Integer> list = new ArrayList<Integer>();
 for (int i = 0; i < 10000; i++) {
  list.add(i);
 }
 Long startTime = System.currentTimeMillis();
 parallelStreamMethod(list);
 Long endTime = System.currentTimeMillis();
 System.out.println("result:" + (endTime - startTime));
}
/**
* stream 并行處理
* @param list
*/
public static void parallelStreamMethod(List<Integer> list){
 list.parallelStream().forEach(i ->{
  System.out.println("========");
 });
}

結(jié)論:1萬以內(nèi)的數(shù)據(jù),for循環(huán)的性能要高于foreach和stream;10萬以內(nèi)的數(shù)據(jù)明顯可以看出stream效率最高,其次foreach,最后是for。

[10萬數(shù)據(jù)時間 893 844 914 972][1萬數(shù)據(jù) 219 203 234 188 ]

最終總結(jié):如果數(shù)據(jù)在1萬以內(nèi)的話,for循環(huán)效率高于foreach和stream;如果數(shù)據(jù)量在10萬的時候,stream效率最高,其次是foreach,最后是for。另外需要注意的是如果數(shù)據(jù)達(dá)到100萬的話,parallelStream異步并行處理效率最高,高于foreach和for。

以上這篇Java8之Stream流代替For循環(huán)操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/qq_39629277/article/details/83110739

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品国产一区二区三区久久久 | 欧美freesex黑人又粗又大 | 午夜视频免费在线观看 | 亚洲国产免费 | 99在线观看 | 久久一区二区视频 | 婷婷精品 | 91在线区| 亚洲一区精品在线 | 最新av在线 | 国产精品毛片在线 | 人人爽人人爽人人片av | 91av视频在线 | 久热在线视频 | 日本黄色免费播放 | 国产一区二区三区免费视频 | 欧美一级精品片在线看 | 中文字幕免费看 | 日韩精品无 | 欧美一级欧美三级在线观看 | 欧美专区在线 | 我要看黄色一级大片 | 精品久久久久久久久久久 | 精品视频一区在线观看 | 中文字幕精品一区二区三区精品 | 国产伊人av | 动漫精品一区二区三区 | 综合久久精品 | 亚洲自拍小视频 | 国产婷婷精品av在线 | 日韩成人免费av | 亚洲人成免费网站 | 国产精品密在线观看 | 亚洲欧美视频网站 | 一区二区三区精品 | 69久久久 | 亚洲精品日韩精品 | 91国产精品| www.色午夜.com | 自拍偷拍在线视频 | 亚洲精品视频免费 |