带比较器的有序流

nim*_*o23 1 java java-8 java-stream

是否getSortedUsers()总是返回的orderd流getUsers() 独立的的getUsers()-collection类型?

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);
}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

Stream通过返回getSortedUsers()将始终进行排序,这是由呼叫保证sorted(comp)。来源是什么都没有关系Stream

现在,如果您决定将其元素收集Stream到some中Collection,则顺序可能会保留,也可能不会保留,具体取决于Collection您选择的类型。如果您将元素收集到中HashSet,则会失去顺序。如果收集到TreeSetLinkedHashSet或任何List,您将保留订单。

  • 对于顺序流,`forEach`恰好使用相遇顺序,因为这是它的实现方式。但是规范中没有保证。甚至有一种无法想象的失败场景。假设的实现可以在终端操作无序时简单地跳过排序操作。 (2认同)