对Java流中的元素重新排序

对Java流中的元素重新排序,java,stream,java-stream,Java,Stream,Java Stream,我有一个对象流,希望实现一个规则,确保流中的第一项不满足特定条件(例如不是奇数)。但我不想丢弃这些项目,我只想确保它们不是列表中的第一个 如何用Java流实现类似的功能?您可以使用比较器对流元素进行排序。此外,您还可以通过调用方法firstComparator.thenComparating(secondComparator)创建带有一些规则的比较器。参见示例。对于输入,我们有数字:[2,3,4,5,7,8,9,10]。对于输出,我们有:[2,4,8,10,3,9,5,7]。首先,我们放偶数。然

我有一个对象流,希望实现一个规则,确保流中的第一项不满足特定条件(例如不是奇数)。但我不想丢弃这些项目,我只想确保它们不是列表中的第一个


如何用Java流实现类似的功能?

您可以使用比较器对流元素进行排序。此外,您还可以通过调用方法
firstComparator.thenComparating(secondComparator)
创建带有一些规则的比较器。参见示例。对于输入,我们有数字:
[2,3,4,5,7,8,9,10]
。对于输出,我们有:
[2,4,8,10,3,9,5,7]
。首先,我们放偶数。然后我们把数字除以三。然后我们把其他的数字

public static void main(String[] args) {
    List<Integer> sourceList = new ArrayList<>(Arrays.asList(2, 3, 4, 5, 7, 8, 9, 10));

    Comparator<Integer> firstComparator = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            if (o1 % 2 == 0 && o2 % 2 == 0 || o1 % 2 != 0 && o2 % 2 != 0) {
                return 0;
            }
            if (o1 % 2 == 0) {
                return -1;
            }
            return 1;
        }
    };

    Comparator<Integer> secondComparator = new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            if (o1 % 3 == 0 && o2 % 3 == 0 || o1 % 3 != 0 && o2 % 3 != 0) {
                return 0;
            }
            if (o1 % 3 == 0) {
                return -1;
            }
            return 1;
        }
    };

    List<Integer> sortedList = sourceList
            .stream()
            .sorted(firstComparator.thenComparing(secondComparator)
            .collect(Collectors.toList());

    System.out.println(sortedList);
}
publicstaticvoidmain(字符串[]args){
List sourceList=newarraylist(Arrays.asList(2,3,4,5,7,8,9,10));
比较器firstComparator=新比较器(){
@凌驾
公共整数比较(整数o1,整数o2){
如果(o1%2==0&&o2%2==0 | | o1%2!=0&&o2%2!=0){
返回0;
}
如果(o1%2==0){
返回-1;
}
返回1;
}
};
比较器secondComparator=新比较器(){
@凌驾
公共整数比较(整数o1,整数o2){
如果(o1%3==0&&o2%3==0 | | o1%3!=0&&o2%3!=0){
返回0;
}
如果(o1%3==0){
返回-1;
}
返回1;
}
};
List sortedList=源列表
.stream()
.排序(第一个比较器。然后比较(第二个比较器)
.collect(Collectors.toList());
系统输出打印LN(分类列表);
}

不确定这是否是一个很好的解决方案。但它可以满足您的需要。
things
是一个列表,
getNum()
访问您想要查看是否为偶数的功能

things.add(0,things.remove(things.indexOf(things.stream().filter(t->t.getNum()%2==0.findFirst().orElse(things.get(0)'));


基本上是过滤列表并找到第一个偶数属性元素,然后通过索引将其删除,该索引返回元素,然后将其插入列表的开头。

我认为这不是一个很好的定义。例如……给定[1,2,3,4,5,6,7,8]您想要什么。[2,4,6,8,1,3,5,7]或[2,1,3,4,5,6,7,8]或者如果考虑到索引的问题,你可能需要考虑使用for循环。much@mavriksc第二个列表(2,1,3,4…)检查答案并请上传