- Iterator から Stream を得る
- 配列から Stream を得る
- Enumeration から Stream を得る
- 文字列を split した結果から Stream を得る
- 乱数 Stream を得る
- 数列の無限 Stream を得る
- org.w3c.dom.NodeList からStreamを得る
- ソート済みの Stream を得る
Iterator から Stream を得る
Iterable に変換してから Stream を得ることができます。
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Iterable<String> iterable = () -> sourceIterator; Stream<String> targetStream = StreamSupport.stream(iterable.spliterator(), false);
または以下でもできます。
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Stream<String> targetStream = StreamSupport.stream( Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED), false);
予めサイズが分かっている場合は以下が使えます。
Spliterators#spliterator(Iterator<? extends T> iterator, long size, int characteristics)
配列から Stream を得る
単に Stream.of()
が使えます。
String[] strs = {"A", "B", "C", "D"}; Stream.of(strs);
Arrays の static メソッドからも得られます。
Arrays.stream(strs)
配列の一部の要素から Stream を作成するには Arrays.stream(array, from, to)
が使えます。
Enumeration から Stream を得る
Collections.list()
を経由させることで Stream を得ます。
Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces(); Stream<NetworkInterface> stream = Collections.list(nets).stream();
文字列を split した結果から Stream を得る
Pattern.splitAsStream()
を使うと正規表現で分割した文字列から Stream を直接得られます。
Stream<String> words = Pattern.compile("[\\P{L}]+").splitAsStream(contents);
乱数 Stream を得る
Stream.generate
は無限ストリームを生成します。
Stream<Double> ramdoms = Stream.generate(Math::random);
100 個の乱数を得るには以下のように書けます。
Stream<Double> ramdoms = Stream.generate(Math::random).limit(100);
数列の無限 Stream を得る
Stream.iterate()
は第一引数にシード、第二引数に UnaryOperator<T>
を取ります。
Stream<BigInteger> integers = Stream.iterate( BigInteger.ZERO, n -> n.add(BigInteger.ONE));
0 1 2 3 ... のような無限数列が生成することができます。
org.w3c.dom.NodeList からStreamを得る
dom をパースした後の NodeList を Stream で扱いたい場合は以下のようにできます。
Stream<Node> nodeStream = IntStream
.range(0, nodeList.getLength())
.mapToObj(nodeList::item);
ソート済みの Stream を得る
ソートされた新たなStremaを得るには sorted()
を使う。
String[] words = "Change before you have to".split("\\W"); Stream<String> longestFirst = Stream.of(words) .sorted(Comparator.comparing(String::length).reversed());
Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング (impress top gear)
- 作者: Cay S. Horstmann,柴田芳樹
- 出版社/メーカー: インプレス
- 発売日: 2014/09/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (10件) を見る