無限Streamに終了条件を設定する (Java9版)
というのを以前書きましたが、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がとても使いやすくなりますね。