JDK 8 EA сейчас нет, и я просто пытаюсь привыкнуть к lambda и новому Stream API. Я попытался отсортировать список с параллельным потоком, но результат всегда неверен:
import java.util.ArrayList;
import java.util.List;
public class Test
{
public static void main(String[] args)
{
List<String> list = new ArrayList<>();
list.add("C");
list.add("H");
list.add("A");
list.add("A");
list.add("B");
list.add("F");
list.add("");
list.parallelStream() // in parallel, not just concurrently!
.filter(s -> !s.isEmpty()) // remove empty strings
.distinct() // remove duplicates
.sorted() // sort them
.forEach(s -> System.out.println(s)); // print each item
}
}
ВЫВОД:
C
F
B
H
A
Обратите внимание, что каждый раз, когда вывод отличается. Мои вопросы, это ошибка? или невозможно сортировать список параллельно? если да, то почему JavaDoc не заявляет об этом? Последний вопрос, есть ли другая операция, выход которой будет отличаться в зависимости от типа потока?