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
}