Java Gold合格への道 ~StreamAPI・sorted~
こんにちは。たろすです。
今回はStreamAPIのsortedの使い方について説明します。
使い方
sortedはStreamの要素をソートするメソッドです。
以下のように使用します。
Arrays.asList(2, 5, 4, 1, 3) .stream() .sorted() .forEach(System.out::print);
12345
引数なしの場合、自然順序でソートします。
StreamインタフェースのsortedメソッドはCoparatorオブジェクトを引数にとることができ、任意の順にソートすることができます。
(IntStreamなどは引数をとることはできません。)
Arrays.asList(2, 5, 4, 1, 3) .stream() .sorted((i, j) -> j - i) .forEach(System.out::print);
54321
Java Gold合格への道 ~StreamAPI・map~
こんにちは。たろすです。
今回はStreamAPIのmapの使い方について説明します。
使い方
mapはStreamの要素をマッピング(=データ集合における個々のデータを別のデータに変換した新しいデータ集合を生成)するメソッドです。
以下のように使用します。
int[] array = { 1, 2, 3, 4, 5 }; IntStream stream = Arrays.stream(array); stream.map(num -> num * 2).forEach(System.out::print);
246810
filterの引数はFunctionの実装で、Functionを適用した新しいStreamオブジェクトを返します。
Java Gold合格への道 ~StreamAPI・filter~
こんにちは。たろすです。
今回はStreamAPIのfilterの使い方について説明します。
使い方
fileterはStreamの要素をフィルタリング(=必要な要素のみを抽出)するメソッドです。
以下のように使用します。
int[] array = { 1, 2, 3, 4, 5 }; IntStream stream = Arrays.stream(array); stream.filter(num -> num >= 3).forEach(System.out::print);
345
filterの引数はPredicateの実装で、結果がtrueの場合のみフィルタを通過します。
Java Gold合格への道 ~StreamAPI・ファイル読み込み~
こんにちは。たろすです。
今回はjava.io.BufferedReaderとjava.nio.file.Filesのlinesメソッドの使い方について説明します。
両者ともファイルから読み込んだ文字列をStream
使い方
java.io.BufferedReader
try (BufferedReader br = new BufferedReader(new FileReader("file/sample.txt"))) { br.lines().forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); }
BufferedReaderはtry with resourcesでインスタンス化しているのでcloseする必要はありません。
java.nio.file.Files
try { Path path = Paths.get("file/sample.txt"); Files.lines(path).forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); }
FilesのlinesメソッドはPathオブジェクトを引数にとるstaticメソッドです。
BufferedReaderのlinesメソッドと混同しないように注意しましょう。
Java Gold合格への道 ~StreamAPI・of~
こんにちは。たろすです。
今回はstreamAPIのofの使い方について説明します。
使い方
ofは任意のオブジェクト集合からStreamオブジェクトを取得する際に使用します。
public class X { public String toString() { return "X"; } }
public class Y { public String toString() { return "Y"; } }
X x = new X(); Y y = new Y(); Stream<Object> stream = Stream.of(x, y); stream.forEach(System.out::print);
XY
IntStreamやLongStream、DoubleStreamにもそれぞれ用意されています。
おわりに
今回はstreamAPIのofの使い方について説明しました。
Java Gold合格への道 ~StreamAPI・range~
こんにちは。たろすです。
今回はstreamAPIの範囲指定について説明します。
rangeとrangeClosed
for文で範囲を指定できるように、IntStreamやLongStreamでもforEachで範囲指定したい場合があります。
そのためにrangeとrangeClosedが存在します。
この二つの違いは範囲の最後の値を含む(range)か含まない(rangeClosed)かです。
使い方
range
IntStream.range(1, 3).forEach(System.out::print);
12
rangeClosed
IntStream.rangeClosed(1, 3).forEach(System.out::print);
123
おわりに
今回はstreamAPIの範囲指定について説明しました。
Java Gold合格への道 ~StreamAPI・MapのforEach~
こんにちは。たろすです。
今回はMapのforEachについて説明します。
java.util.streamのforEachとの違い
java.util.streamのforEachは以下のように定義されています。
void forEach(Consumer<? super T> action)
一方でMapのforEachは以下のように定義されています。
default void forEach(BiConsumer<? super K,? super V> action)
引数がBiConsumerになっています。
どういうことかコードを見ていきます。
まずはjava.util.steramのforEachの使い方です。
int[] array = { 1, 2, 3, 4, 5 }; IntStream stream = Arrays.stream(array); stream.forEach(n -> System.out.print(n));
次にMapのforEachの使い方です。
Map<String, String> map = new HashMap<>(); map.put("k1", "v1"); map.put("k2", "v2"); map.forEach((k, v) -> System.out.print(k + v));
ラムダ式の引数が二つになっています。
また、java.util.streamのforEachの引数は「System.out::print」とメソッド参照にすることができますが、Mapのほうは変数が二つあるためメソッド参照は使えません。
おわりに
今回はMapのforEachについて説明しました。