List排序问题!

aifei_10 2010-06-25 03:15:28
list里面存的是N个对象,有个字段为boolean类型,我想如果是true的话,就让排在最前面.

	public static void sortList(List list) {
if (null != list) {
Comparator comp = new Comparator() {
public int compare(Object o1, Object o2) {
A a = (A) o1;
if (a.isKong()) {
return 0;
}
return 1;
}
};
Collections.sort(list, comp);
}
}

我这样写的排序,结果出来乱7八遭的.
求助!!
...全文
83 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
michaellufhl 2010-10-01
  • 打赏
  • 举报
回复
isKong(), cool!
WAMING5 2010-06-25
  • 打赏
  • 举报
回复
public static void SortList(List list){
if(null==list)
return;
List li=new ArrayList();
for (int i = 0; i < list.size(); i++) {
Comparator co=(Comparator)list.get(i);
if (co.isKong()) {
li.add(co);
list.remove(i);
}
}
for (int i = 0; i < li.size(); i++) {
list.add(i, li.get(i));
}
}
这样行吗?
aifei_10 2010-06-25
  • 打赏
  • 举报
回复
多谢各位,问题已解决!
dr_lou 2010-06-25
  • 打赏
  • 举报
回复
多个字段都是boolean啊。
bean里面设置一个Int,代表有几个true,然后比较这个int吧。
ChDw 2010-06-25
  • 打赏
  • 举报
回复
我如果有2个字段都是boolean类型的,其中随便一个为ture都要排在前面,也有可能2个都为true的情况.
------

如果A是两个为true,B只有一个呢?这个其实非常简单的判断而已,反正你只要记得认为a < b就返回-1,a > b就返回1 ,a==b就返回0就是了

public int compare(Object o1, Object o2) {
A a = (A)o1;
A b = (A)o2;

int aTrueCount = 0;
if(a.isKong())
aTrueCount++;
if(a.isKong2())
aTrueCount++;


int bTrueCount = 0;
if(b.isKong())
bTrueCount++;
if(b.isKong2())
bTrueCount++;

if(aTrueCount != bTrueCount)
return bTrueCount - aTrueCount;
else
return 0;
}
closewbq 2010-06-25
  • 打赏
  • 举报
回复

public class Demo {
private String name;
private boolean flag;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}

}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test {
public static void main(String[] arg){
List<Demo> list=new ArrayList<Demo>();
Demo d1=new Demo();
d1.setName("aaa");
d1.setFlag(false);
list.add(d1);
Demo d2=new Demo();
d2.setName("bbb");
d2.setFlag(false);
list.add(d2);
Demo d3=new Demo();
d3.setName("ccc");
d3.setFlag(true);
list.add(d3);
Demo d4=new Demo();
d4.setName("dddd");
d4.setFlag(false);
list.add(d4);
Demo d5=new Demo();
d5.setName("eee");
d5.setFlag(true);
list.add(d5);

Collections.sort(list, new Comparator<Demo>() {
public int compare(Demo o1, Demo o2) {
int i=o1.isFlag()?1:0;
int j=o2.isFlag()?1:0;
if(i<j)
return 1;
else if(i==j)
return 0;
else return -1;
}
});
for(Demo demo:list){
System.out.println(demo.isFlag()+" "+demo.getName());
}

}
}
aifei_10 2010-06-25
  • 打赏
  • 举报
回复
我如果有2个字段都是boolean类型的,其中随便一个为ture都要排在前面,也有可能2个都为true的情况.
这样子该如何实现了?
谢谢!
doti_ 2010-06-25
  • 打赏
  • 举报
回复
if (null != list) {
Comparator comp = new Comparator() {
public int compare(Object o1, Object o2) {
if (o1 != null && ((Boolean)o1).equals(new Boolean(true))) {
return 0;
}
return 1;
}
};
Collections.sort(list, comp);
}
jisi772864447 2010-06-25
  • 打赏
  • 举报
回复
public class MyCompositor implements Comparator {

public int compare(Object obj1, Object obj2) {
SysRight sr1 = (SysRight)obj1;
SysRight sr2 = (SysRight)obj2;
String str1 = sr1.getRightCode();
String str2 = sr2.getRightCode();
return str1.compareToIgnoreCase(str2);
}

}



这是一个集合
List<SysRight> listRight = new ArrayList<SysRight>();
Set<Map.Entry<String, SysRight>> setRight = mapRight.entrySet();
for (Iterator iterator = setRight.iterator(); iterator.hasNext();) {
Entry<String, SysRight> entry = (Entry<String, SysRight>) iterator.next();
listRight.add(entry.getValue());
}
Collections.sort(listRight, new MyCompositor());
return listRight;


这是对象
public class SysRight implements java.io.Serializable {

private static final long serialVersionUID = 1L;
/**
* 权限map中的key
*/
private String rightCode;
/**
* rightCode的上一级
*/
private String rightParentCode;
/**
* 权限的类型
*/
private String rightType;
/**
* 权限的名称
*/
private String rightText;
/**
* 连接的地址url
*/

根据对象的一个属性来判断排序
private String rightUrl;
/**
* 权限提示信息
*/
private String rightTip;
/**
* 是否具有该权限
*/
private String isChecked = "";
/**
* 权限赋予的角色
*/
private Set<SysRole> roles;
/**
* 权限赋予的用户
*/
private Set<SysUser> users;
closewbq 2010-06-25
  • 打赏
  • 举报
回复
不好意思没看清问题。以为list中只存放了boolean类型呢。
closewbq 2010-06-25
  • 打赏
  • 举报
回复

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test {
public static void main(String[] arg){
List<Boolean> list=new ArrayList<Boolean>();
list.add(false);
list.add(false);
list.add(true);
list.add(false);
list.add(true);
list.add(false);

Collections.sort(list, new Comparator<Boolean>() {
public int compare(Boolean o1, Boolean o2) {
int i=o1?1:0;
int j=o2?1:0;
if(i<j)
return 1;
else if(i==j)
return 0;
else return -1;
}
});
System.out.println(list);

}
}
ChDw 2010-06-25
  • 打赏
  • 举报
回复
将属性为true的对象提前,其它顺序不变
ChDw 2010-06-25
  • 打赏
  • 举报
回复
你的CompareTo明显是错误的,
如果你的意思是,将属性为true的对象提交,其它的顺序不变:

public int compare(Object o1, Object o2) {
A a = (A) o1;
A b = (A) o2;
if(a.isKong() != b.isKong())
return a.isKong() ? -1 : 1;
return 0;//0表示相等
}

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧