5

次の要素で「アクションを実行」するだけでなく、スプリッテレータから次の要素を取得したい。たとえば、次のメソッドを実装することによって

<T> T getnext(Spliterator<T> s) {

}

私が見つけたすべての検索結果は、tryAdvance() がイテレータ hasNext() と next() の組み合わせのようなものであるとだけ言っていましたが、次の要素を取得できないため、「次の要素でアクションを実行する」だけなので、それは大きな嘘です。

4

3 に答える 3

4

項目をリストにラップしてから、そのリストから戻ることができます。

    public static <T> T getNext(Spliterator<T> spliterator) {
        List<T> result = new ArrayList<>(1);

        if (spliterator.tryAdvance(result::add)) {
            return result.get(0);
        } else {
            return null;
        }
    }

これが null を返す可能性のある操作であることを呼び出し元により明確にするために、以下を返すことを検討してOptionalください。

    public static <T> Optional<T> getNext(Spliterator<T> spliterator) {
        final List<T> result = new ArrayList<>(1);

        if (spliterator.tryAdvance(result::add)) {
            return Optional.of(result.get(0));
        } else {
            return Optional.empty();
        }
    }
于 2019-09-06T10:44:42.693 に答える