我想按从高到低的顺序对列表进行排序。这可以正常工作,但是我需要的是具有相同优先级的元素被颠倒(因为我需要首先添加最后添加的项目)。我添加了name变量以快速查看原始顺序

一些代码来阐明:

 myList.add(new Test(-1,"first"));
 myList.add(new Test(-1,"second"));
 myList.add(new Test(-1,"third"));
 myList.add(new Test(1, "fourth"));
 myList.add(new Test(1, "fifth"));

 public static class Test{
    private int priority;
    private String name;

    public Test(int priority, String name) {
        this.priority = priority;
        this.name = name;
    }
}


现在我这样做:


  myList = Stream.of(myList).sortBy(r-> -r.priority).toList();


结果是:


  第四,第五,第一,第二,第三


我想得到的结果是:


  第五,第四,第三,第二,第一


我该怎么做(最好使用https://github.com/aNNiMON/Lightweight-Stream-API库)

最佳答案

  myList.stream().sorted((t1,t2) ->{
          if (t1.priority == t2.priority)
              return -1;
          return -(Integer.compare(t1.priority, t2.priority));
      }).collect(Collectors.toList())


你可以这样尝试

编辑:我修复了解决方案中的一些东西,您应该尝试

关于java - 按优先级对列表进行排序,然后颠倒具有相同优先级的元素的顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55749620/

10-14 11:27