生成流元素的認識以便我讀該Java 8正式文檔:從HashSet的
流可以或可以不具有限定的遭遇順序。 某個流是否有遇到順序取決於源和中間操作。某些流源(例如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提取的文本。
我相信這裏的答案https://stackoverflow.com/questions/29216588/how-to-ens-order-of-processing-in-java8-streams可能只是涵蓋你在這裏問的問題。 – nullpointer