Я прочитал официальные документы Java 8:
Потоки могут иметь или не иметь определенный порядок встречи. Наличие у потока порядка встреч зависит от источника и промежуточных операций. Некоторые источники потоков (например, List или массивы) упорядочены по своей сути, а другие (например, HashSet) — нет.
Если поток упорядочен, повторное выполнение идентичных потоковых конвейеров на идентичном источнике даст идентичный результат; если он не упорядочен, повторное выполнение может привести к другим результатам.
Пытался понять упомянутое поведение через этот код
public class StreamOrderValidator
{
public static void main( String[] args )
{
String[] colors=new String[] {"red","green","blue","orange"};
List<String> colorsList=Arrays.asList(colors);
HashSet<String> colorsSet=new HashSet<>();
colorsSet.addAll(colorsList);
System.out.println(colorsSet); // [red, orange, green, blue]
List<String> processedColorsSet = processStream(colorsSet.stream());
System.out.println(processedColorsSet); // [RED, ORANGE, GREEN, BLUE]
}
private static List<String> processStream(Stream<String> colorStream) {
List<String> processedColorsList = colorStream.filter(s->s.length()<=6).
map(String::toUpperCase).collect(Collectors.toList());
return processedColorsList;
}
}
Я запускал этот код много раз, и порядок элементов в результирующем потоке всегда был одинаковым (отображается как комментарий). Я не могу понять, как это оправдывает приведенный выше текст о том, что «Порядок не сохраняется для неупорядоченной коллекции».
Я определенно неправильно понимаю извлеченный текст из javadocs.