ストリームフロー[]高度な用法 - 和、ソートの組み合わせをグループ化、求め極値

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/cxh6863/article/details/102650492

ストリームの使用に基づいて、ブログ(https://blog.csdn.net/cxh6863/article/details/102634781)を通過し、我々はもはや奇妙な流れは、バーの下に高度な使用法を学びます、ストリームをストリームしないようにすべきです。

-collect合計するパケット

シーン:

クラスでは、誰もが、すべてが性別に基づいて、その後、合計スコアをJavaでコードを使用する方法を、自分のスコアを持っています。

方法:

この方法は、マップに集めリストを収集するために使用し、その後、GROUPBYを使用して分類
GetSumを() -ゲットと
getMax()で-最大取得
getMinを() -最小取得
getAverageを() -平均取得
同様にgetCountを() -データの量を取得します。

使用します。

System.out.println("分组求和:");
Map<String, IntSummaryStatistics> collectGroupBySex = students.stream().collect(Collectors.groupingBy(student::getSex, Collectors.summarizingInt(student::getScore)));
System.out.println("男生:"+collectGroupBySex.get("男"));
System.out.println("男生的分数和:"+collectGroupBySex.get("男").getSum());
System.out.println("男生中最大分数:"+collectGroupBySex.get("男").getMax());
System.out.println("男生中最小分数:"+collectGroupBySex.get("男").getMin());
System.out.println("男生中平均分数:"+collectGroupBySex.get("男").getAverage());
System.out.println("男生个数:"+collectGroupBySex.get("男").getCount());

業績

ここに画像を挿入説明

第二に、ソートの組み合わせ-comparing-> thenComparing

シーン:

クラスでは、誰もが第一画分のすべてのコードを使用して、Javaでのスコアによってソート性別に応じてソートする方法を、自分のスコアを持っています。

方法:

比較、thenComparing

使用

System.out.println("组合排序:");
System.out.println("第一种:");
List<student> collectSortedMore = students.stream().sorted(Comparator.comparing(student::getSex).reversed().thenComparing(student::getScore).reversed()).collect(Collectors.toList());
collectSortedMore.stream().forEach(System.out::println);
System.out.println("第二种:");
students.sort(Comparator.comparing(student::getSex).reversed().thenComparing(student::getScore).reversed());
students.stream().forEach(student -> System.out.println(student));

業績

ここに画像を挿入説明

第三に、極端な値を求めて-summarizingLong / summarizingInt

シーン:

クラスでは、誰もがこのクラス最大のポイントと最小ポイントを求めるのJava平均でコードを使用する方法、自分のスコアを持っています。

方法:

要約を獲得するために最初に使用summarizingLongとsummarizingInt、その後、極端な値をそれぞれ取得します

平均値--getAverage()を求める
(最大--getMaxを取得)を
取得し、最小--getMin()
)(--getSum を取得し
(--getCountの数を取得)

使用

System.out.println("求极值:");
LongSummaryStatistics collectStudentsSummary = students.stream().collect(Collectors.summarizingLong(student::getScore));
System.out.println("平均值=" + collectStudentsSummary.getAverage());
System.out.println("个数=" + collectStudentsSummary.getCount());
System.out.println("最大值=" + collectStudentsSummary.getMax());
System.out.println("最小值=" + collectStudentsSummary.getMin());
System.out.println("总和=" + collectStudentsSummary.getSum());

業績

ここに画像を挿入説明

:最後に、ストリーム上とするために、次のように個人的な理解である
ストリームと比較ループの
ループのために行うために、操作のサイクルれる
ストリームは1回の非同期操作で行われ
、この一つの動作サイクルのために言っている以上である、次のこの動作が一度行われる
ストリームは、すべての操作と同時にほとんどであるが
、ループが実行される時間のために、このような動作サイクルを必要として10回、10回実行、10倍のストリームを10回同時に実行されます。

おすすめ

転載: blog.csdn.net/cxh6863/article/details/102650492