生成流元素的认识以便我读该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