08
Сен
2015

Как использовать Stream повторно?

Сегодня сидел разбирался с нововведениями Java 8. Когда попробовал на практике, сразу столкнулся с ошибкой. Наверное, я чего-то не знаю. Объясните, пожалуйста, что не так.

Вот такой код:

private boolean test( String line )
{
    String[] words = line.split(" ");
    Stream<String> wordsStream = Arrays.asList(words).stream();
    for( int i=0; i < controlWords.length; i++ )
    {
        if( !wordsStream.anyMatch( Predicate.isEqual(controlWords[i]) ) )
        {
            return false;
        }
    }
    return true;
}

Если массив controlWords имеет размер > 1, то всё время получаю ошибку

java.lang.IllegalStateException: stream has already been operated upon or closed

Если же метод чуть-чуть видоизменить, то проблема исчезнет:

private boolean test( String line )
{
    String[] words = line.split(" ");
    //Stream<String> wordsStream = Arrays.asList(words).stream();
    for( int i=0; i < controlWords.length; i++ )
    {
        if( !Arrays.asList(words).stream().anyMatch( Predicate.isEqual(controlWords[i]) ) )
        {
            return false;
        }
    }
    return true;
}

Источник: https://ru.stackoverflow.com/questions/449297/%D0%9A%D0%B0%D0%BA-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-stream-%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%BD%D0%BE

Тебе может это понравится...

Добавить комментарий