按优先级对列表进行排序,然后颠倒优先级相同的元素

时间:2019-04-18 15:47:58

标签: java sorting

我想按优先级从高到低对列表进行排序。这可以正常工作,但是我需要的是具有相同优先级的元素被颠倒(因为我首先需要最后添加的项)。我添加了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库)

1 个答案:

答案 0 :(得分:0)

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

您可以尝试这样

编辑:我在解决方案中修复了一些问题,您应该尝试rn