Java は、Java 8 で java.util.stream と呼ばれる新しい追加パッケージを提供します。このパッケージは、要素に対する関数型スタイルの操作を可能にするクラス、インターフェイス、列挙型で構成されています。 java.util.streamパッケージをインポートすることでストリームを利用することができます。
ストリームは次の機能を提供します。
- ストリームは要素を保存しません。データ構造、配列、I/O チャネルなどの要素を、計算操作のパイプラインを通じてソースから伝達するだけです。
- ストリームは本質的に機能的です。ストリームに対して実行される操作は、ストリームのソースを変更しません。たとえば、コレクションから取得したストリームをフィルタリングすると、ソース コレクションから要素を削除するのではなく、フィルタリングされた要素を含まない新しいストリームが生成されます。
- ストリームは遅延型で、必要な場合にのみコードを評価します。
- ストリームの要素は、ストリームの存続期間中に 1 回だけアクセスされます。 Iterator と同様に、ソースの同じ要素に再度アクセスするには、新しいストリームを生成する必要があります。
ストリームを使用すると、フィルタリング、収集、印刷、およびあるデータ構造から別のデータ構造への変換などを行うことができます。次の例では、ストリームを利用してさまざまな操作を適用しています。
Java ストリーム インターフェイス メソッド
メソッド | 説明 |
---|---|
boolean allMatch(述語述語) | 指定された述語に一致するこのストリームのすべての要素を返します。ストリームが空の場合は true が返され、述語は評価されません。 |
boolean anyMatch(述語述語) | 指定された述語に一致するこのストリームの要素を返します。ストリームが空の場合は false が返され、述語は評価されません。 |
静的 Stream.Builder ビルダー() | ストリームのビルダーを返します。 |
Rcollect(コレクターコレクター) | コレクタを使用して、このストリームの要素に対して可変リダクション操作を実行します。 Collector は、collect(Supplier, BiConsumer, BiConsumer) への引数として使用される関数をカプセル化し、収集戦略の再利用や、複数レベルのグループ化やパーティショニングなどの収集操作の構成を可能にします。 |
Rcollect(サプライヤーサプライヤー、BiConsumerアキュムレーター、BiConsumerコンバイナー) | このストリームの要素に対して可変リダクション操作を実行します。可変リダクションとは、リダクションされた値が ArrayList などの可変結果コンテナーであり、結果を置き換えるのではなく、結果の状態を更新することによって要素が組み込まれるものです。 |
static Stream concat(ストリーム a, ストリーム b) | これは、最初のストリームのすべての要素の後に 2 番目のストリームのすべての要素が続く遅延連結ストリームを作成します。両方の入力ストリームが順序付けされている場合、結果のストリームは順序付けされ、入力ストリームのいずれかが並列である場合は並列になります。結果のストリームが閉じられると、両方の入力ストリームのクローズ ハンドラーが呼び出されます。 |
ロングカウント() | このストリーム内の要素の数を返します。これは減額の特殊なケースです。 |
ストリームのdistinct() | このストリームの個別の要素 (Object.equals(Object) に従って) で構成されるストリームを返します。 |
静的ストリーム空() | 空の順次ストリームを返します。 |
ストリームフィルター(述語述語) | 指定された述語に一致するこのストリームの要素で構成されるストリームを返します。 |
オプションの findAny() | ストリームの一部の要素を記述する Optional を返します。ストリームが空の場合は空の Optional を返します。 |
オプションの findFirst() | このストリームの最初の要素を記述する Optional を返します。ストリームが空の場合は空の Optional を返します。ストリームに遭遇順序がない場合は、任意の要素を返すことができます。 |
ストリーム flatMap(関数 super T,? extends Stream>マッパー) | このストリームの各要素を、提供されたマッピング関数を各要素に適用することによって生成されたマップされたストリームの内容で置き換えた結果で構成されるストリームを返します。マップされた各ストリームは、そのコンテンツがこのストリームに配置された後に閉じられます。 (マップされたストリームが null の場合、代わりに空のストリームが使用されます。) |
DoubleStream flatMapToDouble(関数マッパー) | このストリームの各要素を、提供されたマッピング関数を各要素に適用することによって生成されたマップされたストリームの内容で置き換えた結果で構成される DoubleStream を返します。マップされた各ストリームは、そのコンテンツがこのストリームに配置された後、閉じられます。 (マップされたストリームが null の場合、代わりに空のストリームが使用されます。) |
IntStream flatMapToInt(関数マッパー) | このストリームの各要素を、提供されたマッピング関数を各要素に適用することによって生成されたマップされたストリームの内容で置き換えた結果で構成される IntStream を返します。マップされた各ストリームは、そのコンテンツがこのストリームに配置された後に閉じられます。 (マップされたストリームが null の場合、代わりに空のストリームが使用されます。) |
LongStream flatMapToLong(関数マッパー) | このストリームの各要素を、提供されたマッピング関数を各要素に適用することによって生成されたマップされたストリームの内容で置き換えた結果で構成される LongStream を返します。マップされた各ストリームは、そのコンテンツがこのストリームに配置された後に閉じられます。 (マップされたストリームが null の場合、代わりに空のストリームが使用されます。) |
void forEach(コンシューマアクション) | このストリームの各要素に対してアクションを実行します。 |
void forEachOrdered(コンシューマアクション) | ストリームに遭遇順序が定義されている場合、ストリームの遭遇順序に従って、このストリームの各要素に対してアクションを実行します。 |
静的ストリーム生成(サプライヤー) | これは、各要素が指定されたサプライヤーによって生成される、無限の連続した順序なしストリームを返します。これは、一定のストリーム、ランダムな要素のストリームなどの生成に適しています。 |
静的ストリーム反復(T シード,UnaryOperator f) | これは、関数 f を初期要素シードに反復適用することによって生成された無限の順次順序付けストリームを返し、シード、f(シード)、f(f(シード)) などで構成されるストリームを生成します。 |
ストリーム制限(long maxSize) | このストリームの要素で構成されるストリームを、長さが maxSize 以下になるように切り詰めて返します。 |
ストリームマップ(関数マッパー) | このストリームの要素に指定された関数を適用した結果で構成されるストリームを返します。 |
DoubleStream mapToDouble(ToDoubleFunction マッパー) | このストリームの要素に指定された関数を適用した結果で構成される DoubleStream を返します。 |
IntStream mapToInt(ToIntFunction マッパー) | このストリームの要素に指定された関数を適用した結果で構成される IntStream を返します。 | LongStream マップToLong(ToLongFunction マッパー) | このストリームの要素に指定された関数を適用した結果で構成される LongStream を返します。 |
オプションのmax(コンパレータコンパレータ) | 提供された Comparator に従って、このストリームの最大要素を返します。これは減額の特殊なケースです。 |
オプション min(コンパレータ コンパレータ) | 提供された Comparator に従って、このストリームの最小要素を返します。これは減額の特殊なケースです。 |
boolean noneMatch(述語述語) | 指定された述語に一致するこのストリームの要素を返します。ストリームが空の場合は true が返され、述語は評価されません。 |
@SafeVarargs 静的ストリーム (T... 値) | 要素が指定された値である順次順序付けされたストリームを返します。 |
(T t) の静的ストリーム | 単一の要素を含む連続した Stream を返します。 |
ストリームピーク(コンシューマーアクション) | このストリームの要素で構成されるストリームを返し、結果のストリームから要素が消費されるときに、各要素に対して指定されたアクションをさらに実行します。 |
オプションのreduce(BinaryOperatorアキュムレータ) | 連想累積関数を使用して、このストリームの要素の削減を実行し、削減された値があればそれを記述するオプションを返します。 |
Treduce(Tアイデンティティ、BinaryOperatorアキュムレータ) | 提供された ID 値と連想累積関数を使用して、このストリームの要素の削減を実行し、削減された値を返します。 |
U reduce(U 恒等式、BiFunction アキュムレータ、BinaryOperator コンバイナ) | 提供された ID 関数、累積関数、結合関数を使用して、このストリームの要素の削減を実行します。 |
ストリームスキップ(long n) | ストリームの最初の n 要素を破棄した後、このストリームの残りの要素で構成されるストリームを返します。このストリームに含まれる要素が n 個未満の場合は、空のストリームが返されます。 |
ストリームのソート済み() | このストリームの要素で構成されるストリームを、自然な順序に従って並べ替えて返します。このストリームの要素が Comparable ではない場合、端末操作の実行時に java.lang.ClassCastException がスローされる可能性があります。 |
ストリームソート(コンパレータコンパレータ) | このストリームの要素で構成されるストリームを、指定された Comparator に従って並べ替えて返します。 |
オブジェクト[] toArray() | このストリームの要素を含む配列を返します。 |
A[] toArray(IntFunction ジェネレーター) | このストリームの要素を含む配列を返します。提供されたジェネレーター関数を使用して、返された配列と、パーティション化された実行やサイズ変更に必要となる可能性のある追加の配列を割り当てます。 |
Java の例: ストリームを使用せずにコレクションをフィルタリングする
次の例では、ストリームを使用せずにデータをフィルタリングしています。このアプローチは、ストリーム パッケージがリリースされる前に使用されていました。
ツリートラバース
import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = new ArrayList(); for(Product product: productsList){ // filtering data of list if(product.price<30000){ productpricelist.add(product.price); adding price to a productpricelist } system.out.println(productpricelist); displaying data < pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0, 28000.0] </pre> <hr> <h3>Java Stream Example: Filtering Collection by using Stream</h3> <p>Here, we are filtering data by using stream. You can see that code is optimized and maintained. Stream provides fast execution.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList2 =productsList.stream() .filter(p -> p.price > 30000)// filtering data .map(p->p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr> <h3>Java Stream Iterating Example</h3> <p>You can use stream to iterate any number of times. Stream provides predefined methods to deal with the logic you implement. In the following example, we are iterating, filtering and passed a limit to fix the iteration.</p> <pre> import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element->element+1) .filter(element->element%5==0) .limit(5) .forEach(System.out::println); } } </pre> <p> <strong>Output:</strong> </p> <pre> 5 10 15 20 25 </pre> <hr> <h3>Java Stream Example: Filtering and Iterating Collection</h3> <p>In the following example, we are using filter() method. Here, you can see code is optimized and very concise.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -> product.price == 30000) .forEach(product -> System.out.println(product.name)); } } </pre> <p> <strong>Output:</strong> </p> <pre> Dell Laptop </pre> <hr> <h3>Java Stream Example : reduce() Method in Collection</h3> <p>This method takes a sequence of input elements and combines them into a single summary result by repeated operation. For example, finding the sum of numbers, or accumulating elements into a list. </p> <p>In the following example, we are using reduce() method, which is used to sum of all the product prices.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product->product.price) .reduce(0.0f,(sum, price)->sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product->product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 201000.0 </pre> <hr> <h3>Java Stream Example: Sum by using Collectors Methods</h3> <p>We can also use collectors to compute sum of numeric values. In the following example, we are using Collectors class and it?s specified methods to compute sum of all the product prices.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Using Collectors's method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product->product.price)); System.out.println(totalPrice3); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 </pre> <hr> <h3>Java Stream Example: Find Max and Min Product Price</h3> <p>Following example finds min and max product price by using stream. It provides convenient way to find values without using imperative approach.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productB.price); } } </pre> <p> <strong>Output:</strong> </p> <pre> 90000.0 25000.0 </pre> <hr> <h3>Java Stream Example: count() Method in Collection</h3> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product->product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)></pre></30000){>
Java ストリームの例: ストリームを使用したコレクションのフィルタリング
ここでは、ストリームを使用してデータをフィルタリングしています。コードが最適化され、維持されていることがわかります。ストリームは高速な実行を提供します。
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList2 =productsList.stream() .filter(p -> p.price > 30000)// filtering data .map(p->p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } }
出力:
[90000.0]
Java ストリームの反復例
ストリームを使用すると、何度でも反復できます。 Stream には、実装するロジックを処理するための事前定義されたメソッドが用意されています。次の例では、反復、フィルタリングを行っており、反復を修正するために制限を渡しています。
import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element->element+1) .filter(element->element%5==0) .limit(5) .forEach(System.out::println); } }
出力:
5 10 15 20 25
Java ストリームの例: コレクションのフィルタリングと反復
次の例では、filter() メソッドを使用しています。ここで、コードが最適化され、非常に簡潔になっていることがわかります。
import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -> product.price == 30000) .forEach(product -> System.out.println(product.name)); } }
出力:
Dell Laptop
Java ストリームの例: コレクション内のreduce() メソッド
このメソッドは、一連の入力要素を取得し、繰り返し操作することでそれらを 1 つの集計結果に結合します。たとえば、数値の合計を求めたり、要素をリストに蓄積したりします。
次の例では、すべての製品の価格を合計するために使用される、reduce() メソッドを使用しています。
import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product->product.price) .reduce(0.0f,(sum, price)->sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product->product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } }
出力:
201000.0 201000.0
Java ストリームの例: コレクター メソッドを使用した合計
コレクターを使用して数値の合計を計算することもできます。次の例では、Collectors クラスとその指定されたメソッドを使用して、すべての製品価格の合計を計算しています。
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Using Collectors's method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product->product.price)); System.out.println(totalPrice3); } }
出力:
201000.0
Java ストリームの例: 製品価格の最大値と最小値を求める
次の例では、ストリームを使用して製品の最小価格と最大価格を見つけます。これは、命令的アプローチを使用せずに値を見つける便利な方法を提供します。
import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)->product1.price > product2.price ? 1: -1).get(); System.out.println(productB.price); } }
出力:
90000.0 25000.0
Java ストリームの例: コレクション内の count() メソッド
import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product->product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)>
stream を使用すると、結果をさまざまな形式で収集できます。結果をセット、リスト、またはマップとして取得し、要素に対して操作を実行できます。
Java ストリームの例: リストをセットに変換する
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product->product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } }
出力:
[25000.0, 28000.0]
Java ストリームの例: リストをマップに変換する
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p->p.id, p->p.name)); System.out.println(productPriceMap); } }
出力:
{1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop}
ストリーム内のメソッド参照
import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,'HP Laptop',25000f)); productsList.add(new Product(2,'Dell Laptop',30000f)); productsList.add(new Product(3,'Lenevo Laptop',28000f)); productsList.add(new Product(4,'Sony Laptop',28000f)); productsList.add(new Product(5,'Apple Laptop',90000f)); List productPriceList = productsList.stream() .filter(p -> p.price > 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } }
出力:
[90000.0]
30000)>30000){>