比較ループ、反復子ため、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 }