在Java 8中排序列表和应用限制

时间:2018-01-08 05:56:38

标签: java sorting

我在List中使用java8

我有一个包含自定义类对象的列表。我需要根据对象属性以对象的形式填充此列表,并且在排序后我需要在列表中应用限制。

例如

  public class TempClass {
       String name; int count;
       //... Getter, setter and constructor
  }

  // Suppose I have a list with TempClass
  List<TempClass> tempList = new ArrayList<>();

  // There are five obj Of TempClass
  TempClass obj1, obj2, obj3, obj4, obj5;

  // I need to insert these object according to "count" property
  // Suppose obj1.getCount = 10, obj2 = 7, obj3 = 11, obj4 = 8, obj5=12
  /* I need to add element in order
      0 - obj5
      1 - obj1
      2 - obj3
      3 - obj4
      4 - obj2
  */

第二件事我需要在排序后在List中应用限制。在这种情况下,我只需要Top中的3个元素obj5, obj1, obj3

请告诉我怎么办?我正在使用java8和Google云 端点

2 个答案:

答案 0 :(得分:0)

我找到了答案。

对于List排序,使用lambda表达式或Comparable。

喜欢这个。

tempList.sort(Comparator.comparingInt(t -> t.getCount()));

并且限制。

tempList= tempList.stream().limit(3).collect(Collectors.toList());

答案 1 :(得分:0)

PriorityQueue<TempClass> queue = new PriorityQueue<>(Comparator.comparingInt(TempClass::getCount));
for (TempClass temp : tempList) {
    queue.offer(temp);
    if (queue.size() > 3) {
        queue.poll();
    }
}

LinkedList<TempClass> result = new LinkedList<>();
while (queue.size() > 0) {
    result.push(queue.poll()); //obj5, obj1, obj3
}