ストリームフロートラバーサルjava8

 

比較ループ、反復子ため、java8Streamは異なる流れを横切ります

  1  パッケージcnom.test.testUtils。
  2  
  3  インポートたjava.io.Serializable。
  4  インポートjava.util.ArrayListの。
  5  輸入java.util.Collections。
  6  インポートはjava.util.Comparator。
  7  インポートするjava.util.Iterator。
  8  輸入はjava.util.List;
  9  インポートjava.util.Randomの。
10  
11  パブリック クラスTestCollectionsSort {
 12  
13      公共 静的 ボイドメイン(文字列[]引数)がスローInterruptedExceptionあるが{
14          TestCollectionsSortテスト= 新しいTestCollectionsSort()。
15  
16          一覧<TestSortModel>リスト= 新しいのArrayList <TestSortModel> ();
17          TestSortModelモデル= NULL ;
18          のためには、int型 i = 0; iが8000 <; Iは++ ){
 19              モデル=試験。新しいTestSortModel();
20              INT intId =(INT)(Math.random()* 100 )。
21              model.setIntId(intId)。
22              model.setName( "TES" + I)。
23              list.add(モデル)。
24          }
 25          //         JAVA8使用コンパレータ排序
 26          //         はlist.sort(Comparator.comparing(TestSortModel :: getIntId、
 27          //                 Comparator.nullsLast(Comparator.naturalOrder())))。
28  
29          一覧<文字列> resList = 新しいのArrayList <文字列> ();
30  
31          長い T1 = にSystem.currentTimeMillis();
32          のための(TestSortModelのTSM:リスト){
 33              のint ID = tsm.getIntId()。
34              //            Thread.sleep(1)。
35              resList.add(tsm.getName())。
36          }
 37          のSystem.out.println( "循环遍历耗时ため增强:" +(のSystem.currentTimeMillis() - T1)+ ";はlist.size()="
 38                  +はlist.size()+「;リスト= 「+ resList.toString())。
39          resList.clear()。
40  
41          長い T2 = にSystem.currentTimeMillis();
42          のためには、int型 0 = Iと、iははlist.sizeを()<; iは++ ){
 43              INT ID = list.get(I).getIntId();
44              //           のThread.sleep(1)。
45             resList.add(list.get(I).getName());
46          }
 47          のSystem.out.println( "循环遍历耗时ための" +(のSystem.currentTimeMillis() - T2)+ ";はlist.size()="
 48                  +はlist.size()+ ";リスト=" + resList.toString())。
49          resList.clear();
50  
51           T3 = にSystem.currentTimeMillis();
52          イテレータ<TestSortModel>それ= (list.iterator)を、
53          TestSortModel TM = NULL ;
54          一方(it.hasNext()){
 55              TM = it.next()。
56              INT= ID tm.getIntId();
 57である             //           のThread.sleep(1); 
58              resList.add(tm.getName());
 59          }
 60          のSystem.out.println( "処理イテレータトラバーサル:" +(システム。 currentTimeMillis付き() - T3)+ ";はlist.size()は="
 61である                  ";リスト=" + +はlist.size()+ resList.toString());
 62である         ; resList.clear()
 63は 
64          // parallerlStreamトラバーサル時間のかかる処理のビジネスロジックのため。 
65          // 注:要素を横断する別のリストに追加した場合は、そのリストは、そうでない横断プロセス、スレッドセーフである必要があり、二つのことが起こる:
 66個の         // リストの1要素が失われます状況; 2.トラバーサルがスローされます。ArrayIndexOutOfBoundsExceptionが
67         一覧<TestSortModel> = Collections.synchronizedList(listt 新しい新しいのArrayList <TestSortModel> ());
 68          ロング T4 = にSystem.currentTimeMillis();
 69          。List.parallelStream()はforEach(TSM - > { // 元のリストがforEachOrderedたままにするかどうか配列
70              のint ID = tsm.getIntId();
 71である             //             listt.add(TSM); // 出力listt要素が失われている、リストは、スレッドセーフではない
72              のtry {
 73である                 //                 (1)のThread.sleep ; 
74                  resList.add(tsm.getName()); // resList出力素子失っているであろう
75             } キャッチ(例外E){
 76                  e.printStackTrace();
 77              }
 78          });
 79          のSystem.out
 80                  .println( "処理list.parallelStream()のforEach()トラバーサル:." +(のSystem.currentTimeMillis() - T4)
 81                          + ";はlist.size()=" + resList.size()+ ";リスト=" + resList.toString());
 82          resList.clear();
 83  
84          ロング T5 = のSystem.currentTimeMillis( );
 85          。list.stream()のforEach(TSM - > { // 同様のシリアル実行、及びサイクル効率のために、合理コード
86             INTの ID = tsm.getIntId()。
87              試し{
 88                  //               のThread.sleep(1); 
89                  resList.add(tsm.getName())。
90              } キャッチ(例外e){
 91                  // TODO自動生成されたcatchブロック
92                  e.printStackTraceを()。
93              }
 94          });
95          のSystem.out.println( "list.stream()のforEach()遍历耗时:" +(のSystem.currentTimeMillis() - T5)
 96                  + ";はlist.size()=" +はlist.size()+ ";リスト=" + resList.toString())。
97         resList.clear();
 98  
99          ロング T6 = にSystem.currentTimeMillis();
 100          list.forEach(TSM - > { // forループ同様の効率で、コードを合理
101              INTの ID = )tsm.getIntId(;
 102              トライ{
 103                  //               のThread.sleep(1); 
104                  resList.add(tsm.getName());
 105              } キャッチ(例外E){
 106                  // TODO自動生成キャッチブロック
107                  e.printStackTrace();
 108              }
 109          }) ;
 110         System.out.println( "処理list.forEach()トラバーサル:" +(のSystem.currentTimeMillis() - T6)
 111                  + ";はlist.size()=" +はlist.size()+ "; =一覧" + resList.toString());
 112          resList.clear();
 113  
114          / ** 
115           ループ1は、ループ反復のために拡張*ために処理:80051
 1 16           *ループ2のためのループ反復のために処理:80032
 117           *イテレータトラバーサル時間: 80069
 118           。* list.parallelStream()はforEach()トラバーサル時間:アンダースレッド環境以上20101、優れた効率の使用時間のかかるビジネスロジックを実行するとき。
119           。* List.stream()のforEach()トラバーサル加工:80049コード合理
 120           80031:* list.forEach()トラバーサル加工
 121           * / 
122  
123     }
 124  
125      パブリック クラス TestSortModelが実装シリアライズ{
 126  
127          プライベート 静的 最終 長いのserialVersionUID = -890909910704287938L 128  
129          プライベート 長いlongId。
130  
131          プライベート int型intId。
132  
133          プライベート文字列名;
134  
135          公衆 ロングgetLongId(){
 136              リターンlongId。
137          }
 138  
139          パブリック ボイド setLongId(長いlongId){
 140              この .longId = longId。
141          }
 142  
143          公共 INT getIntId(){
 144              リターンintId。
145          }
 146  
147          公共 ボイド setIntId(INT intId){
 148              この .intId = intId。
149          }
 150  
151          公共の文字列のgetName(){
 152              戻り名。
153          }
 154  
155          パブリック ボイドのsetName(文字列名){
 156              この .nameの= 名前。
157          }
 158  
159      }
 160 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/itfeng813/p/11573179.html