List.sort 比较器排序

T为实体类，假设有两个字段A和B

A==1的数据还要再根据B字段排序，请不吝赐教。

1个回答

`````` import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Untitled {
public static void main(String[] args) {
List<I> list = new ArrayList<I>();
Collections.sort(list, new Comparator<I>() {
@Override
public int compare(I o1, I o2) {
if (o1.A == 1 && o2.A == 1)
return o1.B - o2.B;
if (o1.A == 1 || o2.A == 1)
return o1.A == 1 ? -1 : 1;
return o1.B - o2.B;
}
});
System.out.println(list);
}
}

class I
{
public int A;
public int B;
public I(int a, int b) { A = a; B = b; }
@Override
public String toString() {
return A + "," + B;
}
}
``````

[1,2, 1,3, 1,5, 8,0, 7,1, 9,3, 0,5, 5,5, 4,9]

Jsonol 回复caozhy: 谢谢，明白了

Jsonol 回复caozhy: if (o1.A == 1 || o2.A == 1) 这一步看好久没看懂，能解释一下吗，谢谢

Jsonol 大哥正确的，想再问一句，这排序是冒泡排序的算法实现吗，o1 和 o2代表什么实际意义

com/sinosoft/mall/freightTransport/ui/action/FreightTransportAction\$1at com.sinosoft.mall.freightTransport.ui.action.FreightTransportAction.sortByName(FreightTransportAction.java:932)at com.sinosoft.mall.freightTransport.ui.action.FreightTransportAction.getParameter(FreightTransportAction.java:1048)at com.sinosoft.mall.freightTransport.ui.action.FreightTransportAction.paySend1(FreightTransportAction.java:836)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:597)at com.sinosoft.sysframework.web.control.BaseProcessAction.execute(BaseProcessAction.java:60)at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)at weblogic.servlet.internal.StubSecurityHelper\$ServletServiceAction.run(StubSecurityHelper.java:227)at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at com.sinosoft.admin.common.systemconfig.SessionFilter.doFilter(SessionFilter.java:64)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at com.sinosoft.admin.common.systemconfig.LanguageFilter.doFilter(LanguageFilter.java:53)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)at weblogic.servlet.internal.WebAppServletContext\$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)at weblogic.servlet.internal.WebAppServletContext\$ServletInvocationAction.run(WebAppServletContext.java:3696)at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)11111111

C++list中使用sort排序

#include<iostream> #include<string> #include<cmath> #include <iomanip> #include<fstream> #include <cstdlib> #include <list> #include <algorithm> using namespace std; //定义学生类 class Student { public: string StuName; //姓名 string StuNum; //学号 string Sex; //性别 //成绩 float English; //英语 float SQL; //SQL float Prob; //概率论 float Circuit; //电路 float CSharp; //C# float Average; //平均成绩 }; list<Student> studList; 已经用list存入数据了，如何将list里的数据按平均成绩排序

public class Lock { private int lock;// lock有两个值：0 unlock ； 1 lock private String name; public int getLock() { return lock; } public void setLock(int lock) { this.lock = lock; } public String getName() { return name; } public void setName(String name) { this.name = name; } } *** public class Test{ public static void main(String[] args) { List<Lock> list = getLockDao(参数);//从数据库中查询出所有Lock，并放在一个list里面 } } 现在我想要用Collections.sort()给这个list排序，当lock的值为0时，对应的数据排在前面，lock的值为1时，对应的数据排在后面，请问该怎么写，以上代码都固定了，不能更改，只能写比较函数，求大神指教

python列表排序关于sort()

scale_1=['0-15','15-50','50-150','150-500','500-2000','2000+'] 对混乱的这个进行排序是，我的思路是定义函数得到每个的第一个数字但不知道如何加入sort里面def sorted1(i): if x[0,1]=='20': return 2000 else: return int(i.split('-'))

java排序中如何定义多个比较器

import java.util.Arrays; import java.util.Scanner; public class A implements Comparable{ String i; String j; String p; public A(String i,String j,String p){ this.i=i; this.j=j; this.p=p; } @Override public int compareTo(Object obj) { // TODO Auto-generated method stub String k=((A)obj).j; if (k.compareTo(j)>0) return -1; else if (k.compareTo(j)<0) return 1; else return 0; } public static void main(String[] args) { Scanner in=new Scanner(System.in); int n=in.nextInt(); A[]x=new A[n]; for (int i=0;i<n;i++){ String a=in.next(); String b=in.next(); String c=in.next(); x[i]=new A(a,b,c); } Arrays.sort(x); //按j排序 System.out.print(x[0].j); Arrays.sort(x); //按p排序 System.out.print(x[n-1].p); } } 第一个比较器按j排序，已加。 第二个比较器按p排序，应该加在哪里？

ArrayList()集合元素大小排序方法sort（）使用

ArrayList()集合元素大小排序方法sort（）如何使用的，需继承什么类么

Android 集合之间的比较以及排序算法相关问题

php自带的sort排序和用php实现排序算法的性能比较？

java list集合属性值比较

java中的这个comparator怎么个排序法

import java.util.Comparator; import java.util.TreeSet; public class StudentTreeSet { public static void main(String[] args) { // TODO Auto-generated method stub TreeSet<Student> students = new TreeSet<Student>(new AgeAscComparator()); students.add(new Student("张三", 3,59)); //实参分别是name,age,score; students.add(new Student("李四", 1,60)); students.add(new Student("王五", 2,88)); students.add(new Student("陈六", 5,46)); students.add(new Student("田七", 4,55)); System.out.println(students); } } class AgeAscComparator implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { return o1.getAge()-o2.getAge(); } }

C++结构体 用sort排序 自己定义比较函数cmp bool cmp() struct lzl { string s; int a,b; }x[100]; bool cmp(lzl n,lzl m) { if(n.a!=m.a) return n.a>m.a; if(n.a==m.a&&n.b!=m.b) return n.b>m.b; if(n.a==m.a&&n.b==m.b) return n.s<m.s; } 如果a不同，用a来排序，如果a相同，b不同，就用b来排序，a,b都相同就用s来排序。 我想问的是，这个语句在cmp里面怎么写啊！两个的我会写，但是3个怎么写啊？

C++怎么在类中使用sort，比较函数是非静态成员函数

List 排序，取最小值（包括重复的）

c++ sort() 比较函数重载问题

Map和list一起用的问题

``` Map<String, Boolean> map = new HashMap<>(); map.put("0", true); map.put("1", true); map.put("2", true); map.put("3", false); List<String> list = new ArrayList<>(); list.add("红色"); list.add("蓝色"); list.add("绿色"); list.add("紫色"); ``` Map里面键 对应这 list里面的下标 true的时候让list里面对应的下标删除 怎么 写啊 求求大神救救我吧 我都纠结两天了

java List相似元素比较

ArrayList<Integer> list = new ArrayList<Integer>(); list.add(100); list.add(22); list.add(77); list.add(44); list.add(55); System.out.println(list); Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer num1, Integer num2) { return num1>num2?1:-1; } }); System.out.println(list); } 我们假设 num1 = 100 , num2 = 22. 那么 num1>num2 返回的是1 . 然后呢？ 不太明白 。 能帮忙细讲解 一下么。。一步一步的，，

Java基础知识面试题（2020最新版）

String s = new String(" a ") 到底产生几个对象？

Linux面试题（2020最新版）

Linux命令学习神器！命令看不懂直接给你解释！

loonggg读完需要3分钟速读仅需 1 分钟大家好，我是你们的校长。我之前讲过，这年头，只要肯动脑，肯行动，程序员凭借自己的技术，赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

85后蒋凡：28岁实现财务自由、34岁成为阿里万亿电商帝国双掌门，他的人生底层逻辑是什么？...

MySQL数据库面试题（2020最新版）