無限Streamに終了条件を設定する (Java9版)

noisyspot.hatenablog.com

というのを以前書きましたが、Java9では Stream#takeWhile というメソッドが追加されてこういうケースが簡単に書けるようになりました。

    public static String getTreePathTakeWhile(Node node, String delimiter) {
        List<String> names = Stream.iterate(node, Node::getParent)
                .takeWhile(n -> n != null)
                .map(n -> n.getName())
                .collect(Collectors.toList());
        Collections.reverse(names);

        return delimiter + String.join(delimiter, names);
    }

これでSupplierを使った無限Streamがとても使いやすくなりますね。