Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java8中的排序列表和应用限制_Java_Sorting - Fatal编程技术网

Java8中的排序列表和应用限制

Java8中的排序列表和应用限制,java,sorting,Java,Sorting,我正在java8中使用List 我有一个自定义类对象的列表。我需要根据对象属性以排序形式用对象填充此列表,排序后我需要在列表中应用限制 例如 public class TempClass { String name; int count; //... Getter, setter and constructor } // Suppose I have a list with TempClass List<TempClass> tempLi

我正在
java8
中使用
List

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

例如

  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
  */
公共类TempClass{
字符串名称;整数计数;
//…Getter、setter和constructor
}
//假设我有一个TempClass的列表
List templast=new ArrayList();
//TempClass有五个obj
临时类obj1、obj2、obj3、obj4、obj5;
//我需要根据“计数”属性插入这些对象
//假设obj1.getCount=10,obj2=7,obj3=11,obj4=8,obj5=12
/*我需要按顺序添加元素
0-obj5
1-obj1
2-obj3
3-obj4
4-obj2
*/
排序后,我需要在
列表中应用限制。我只需要从顶部开始的3个元素,在本例中仅
obj5、obj1、obj3

你能告诉我怎么做吗?我在谷歌云上使用java8 端点

我找到了答案

对于
列表
排序,请使用lambda表达式或类似表达式

像这样

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

tempList= tempList.stream().limit(3).collect(Collectors.toList());
PriorityQueue queue=newpriorityqueue(Comparator.comparingit(TempClass::getCount));
用于(临时类临时:圣堂武士){
报价(临时);
if(queue.size()>3){
queue.poll();
}
}
LinkedList结果=新建LinkedList();
while(queue.size()>0){
result.push(queue.poll());//obj5、obj1、obj3
}

您试图实现什么?我不确定我需要什么try@AzeemHaider什么???你知道该怎么做吗?在提出这个问题之前你做过研究吗?例如,搜索“java列表排序”,然后搜索“java列表限制结果”(提示:sublist),阅读这些内容并编写代码。如果您正在处理该代码或遇到问题,请在此处发布一个问题。感谢
子列表
,但排序如何?我正在使用循环,但它工作不正常。我是java新手,可能有好办法,除了top N之外,对所有数字都不需要排序。@neuo除非先排序,否则你怎么知道哪些数字在顶部?@eis,使用
最大堆
。只将
n
元素保存在容器中,并像我的回答一样参与比较。@neuo您仍然在对所有元素进行排序,只是在每次排序后删除额外的元素。它不会改变您仍在对每个元素进行排序的事实。@eis,每个循环,仅与当前的3个最大值进行比较。时间复杂度是O(N*logk),您的算法是O(N*logN)。如果N>>K,差异可能很大。
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
}