Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带比较器的有序流_Java_Java 8_Java Stream - Fatal编程技术网

Java 带比较器的有序流

Java 带比较器的有序流,java,java-8,java-stream,Java,Java 8,Java Stream,getSortedUsers是否总是独立于getUsers集合类型返回getUsers的orderd流 public Set<User> getUsers(){ // unordered collection type HashSet<User> set = new HashSet<>(); set.add(..); set.add(..); set.add(..); return set; } // Is t

getSortedUsers是否总是独立于getUsers集合类型返回getUsers的orderd流

public Set<User> getUsers(){
    // unordered collection type
    HashSet<User> set = new HashSet<>();
    set.add(..);
    set.add(..);
    set.add(..);
    return set;
}

// Is the stream only sorted if getUsers() is hold within a sortable collection type?
public Stream<User> getSortedUsers(Comparator<User> comp){
    return getUsers().stream().sorted(comp);
}
getSortedUsers返回的流将始终被排序,这通过调用sortedcomp得到保证。流的源头是什么并不重要

现在,如果您决定将该流的元素收集到某个集合中,则顺序可能会保留,也可能不会保留,这取决于您选择的集合类型。如果将元素收集到哈希集中,则会丢失顺序。如果您收集到树集、LinkedHashSet或任何列表中,您将保留顺序。

getSortedUsers返回的流将始终被排序,这通过调用sortedcomp得到保证。流的源头是什么并不重要


根据您现在选择的集合类型,您可以选择不保留该集合的某个集合类型,也可以选择不保留该集合的某个集合类型。如果将元素收集到哈希集中,则会丢失顺序。如果收集到树集、LinkedHashSet或任何列表中,您将保留顺序。

因此getSortedUsers.forEach和getSortedUsers.forEachOrdered行为相同,因为返回的流是有序的。我说的对吗?@nimo23不。与forEach命令不同,forEach不保证尊重溪流的遭遇顺序。如果使流并行,您将观察到不同的行为。但是如果我不使用并行流,因为流是有序的而不是并行的,forEach必须返回比较器定义的有序序列。或者?@nimo23是的,在顺序流中,forEach应该按照比较器定义的顺序返回元素。对于顺序流,forEach碰巧使用了遭遇顺序,因为这是它的实现方式。但是说明书中没有保证。甚至有一个可以想象的失败场景。假设的实现可能只是在终端操作无序时跳过排序操作。因此getSortedUsers.forEach和getSortedUsers.forEachOrdered行为相同,因为返回的流是有序的。我说的对吗?@nimo23不。与forEach命令不同,forEach不保证尊重溪流的遭遇顺序。如果使流并行,您将观察到不同的行为。但是如果我不使用并行流,因为流是有序的而不是并行的,forEach必须返回比较器定义的有序序列。或者?@nimo23是的,在顺序流中,forEach应该按照比较器定义的顺序返回元素。对于顺序流,forEach碰巧使用了遭遇顺序,因为这是它的实现方式。但是说明书中没有保证。甚至有一个可以想象的失败场景。假设的实现可能只是在终端操作无序时跳过排序操作。