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八遭的.
求助!!
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八遭的.
求助!!
解决方案 »
- 关于JNDI的问题
- oracle查询出的数据顺序问题
- jackson-ObjectMapper.writeValue(JsonGenerator,Object,SerializationConfig)怎么用?
- j2ee邮箱!
- 我用struts+hibernate+spring做了一个网站,放在java服务器上运行,刚开始运行正常,但是过一段时间,再登陆网站,总报如下错误,谢谢您的回答
- 谁可以告诉我在什么地方可以下载JBoss?
- 100分解决一个小问题!!!要详细啊...在线等
- EJB的中文问题
- ejb容器管理事务的问题!!!
- jboss+tomcat中,这样的异常是怎么回事,急啊!!!
- socket 接收文件 死锁
- 100分,如何用hibernate将枚举映射到数据库int类型
如果你的意思是,将属性为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表示相等
}
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);}
}
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;
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);
}
这样子该如何实现了?
谢谢!
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());
}}
}
------如果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;
}
bean里面设置一个Int,代表有几个true,然后比较这个int吧。
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));
}
}
这样行吗?