我想确保基于某些字段值的并行流中的顺序。也许我将介绍一些抽象的例子:
假设我们有班级用户
@Lombok.Data()
class User {
private String firstName;
private String lastName;
private int someValue;
private int priority;
}
并且我们有这些用户的列表:
List<User> users = someInitUsersFunction();
我想强制并行流按优先级处理每个用户,比方说,我们有100个具有0优先级的用户,100个具有1个优先级的用户和100个具有2个优先级的用户。
仅当优先级为1且优先级为0时,我才想以优先级2启动进程用户。
我认为
MVN安装-T 4
可能是我正在寻找的方法(第一个构建独立模块)。是否可以在Java流中执行此操作?也可以使用替代方法。
我的方法是按优先级划分到特定列表,然后按列表处理列表
[Sequential vs parallel
与ordering
不同。
[如果您有一个有序的流,并执行一些保证维持顺序的操作,则以并行还是顺序处理该流并不重要;实现必须保持顺序。
在您的情况下,您可以使用特定的Comparator
或让User
在Comparable
字段中实现priority
。然后对列表进行排序,然后再执行其他流操作。
或使用特定的集合类型,例如SortedSet
或PriorityQueue
关于PriorityQueue
的某些注意事项,不能保证方法iterator()中提供的Iterator以任何特定顺序遍历PriorityBlockingQueue的元素。
因此,您必须在流式传输期间对元素进行排序以保持顺序-> stream().sorted()
或仅在其上使用poll
方法。