Java 使用comparator时如何排除字符串
现在,我正在使用Comparator对我的对象进行排序Java 使用comparator时如何排除字符串,java,comparator,Java,Comparator,现在,我正在使用Comparator对我的对象进行排序 FIRST ITEM SECOND ITEM THIRD ITEM LAST ITEM FORTH ITEM 比较器代码为: public static Comparator<PartyResultVO> sortData = new Comparator<PartyResultVO>() { public int compare(VO vo1, VO vo2)
FIRST ITEM
SECOND ITEM
THIRD ITEM
LAST ITEM
FORTH ITEM
比较器代码为:
public static Comparator<PartyResultVO> sortData = new Comparator<PartyResultVO>()
{
public int compare(VO vo1, VO vo2)
return (vo1.getName()).compareTo(vo2.getName());
};
publicstaticcomparatorsortdata=newcomparator()
{
公共整数比较(VOVO1,VOVO2)
return(vo1.getName()).compareTo(vo2.getName());
};
排序非常有效。但我想要的是,我需要将名称为<代码>最后一项代码>的项放在最后。我如何才能仅排除该对象并将其放在末尾。有什么方法可以做到这一点吗
请帮助我。提前谢谢…您可以为这种情况添加特殊逻辑:
public static Comparator<VO> sortData = new Comparator<VO>()
{
public int compare(VO vo1, VO vo2) {
if (vo1.getName().equals("LAST ITEM")) {
if (vo2.getName().equals("LAST ITEM")) {
return 0;
} else {
return 1;
}
else if (vo2.getName().equals("LAST ITEM")) {
return -1;
}
return (vo1.getName()).compareTo(vo2.getName());
}
};
publicstaticcomparatorsortdata=newcomparator()
{
公共整数比较(VOVO1,VOVO2){
if(vo1.getName().equals(“最后一项”)){
if(vo2.getName().equals(“最后一项”)){
返回0;
}否则{
返回1;
}
else if(vo2.getName().equals(“最后一项”)){
返回-1;
}
return(vo1.getName()).compareTo(vo2.getName());
}
};
您可以将状态引入比较器,并使其在特定值下异常工作,返回一个整数以保证它是最后一个。Keppil比较器的扩展示例:
class PartyResultComparator implements Comparator<PartuResultVO> {
String exceptionalValue;
public PartyResultComparator(String exceptionalValue) {
this.exceptionalValue = exceptionalValue;
}
public int compare(VO vo1, VO vo2) {
if (isExceptional(vo1.getName())) {
return 1;
else if (isExceptional(vo2.getName())) {
return -1;
}
return (vo1.getName()).compareTo(vo2.getName());
}
private boolean isExceptional(String value) {
// is this value exceptional?
}
}
类PartyResultComparator实现Comparator{
字符串异常值;
公共部分ResultComparator(字符串异常值){
this.exceptionalValue=exceptionalValue;
}
公共整数比较(VOVO1,VOVO2){
if(IsException(vo1.getName())){
返回1;
else if(IsException(vo2.getName())){
返回-1;
}
return(vo1.getName()).compareTo(vo2.getName());
}
专用布尔值IsException(字符串值){
//这个值是例外吗?
}
}
你能试试这个吗
Collections.sort(list, new Comparator<PartyResultVO>() {
@Override
public int compare(VO vo1, VO vo2) {
if (vo1.getName().equals("LAST ITEM")) {
if (vo2.getName().equals("LAST ITEM")) {
return 0;
} else {
return 1;
}
else if (vo2.getName().equals("LAST ITEM")) {
return -1;
}
return vo1.getName().compareTo(vo2.getName());
}
});
Collections.sort(列表,新比较器(){
@凌驾
公共整数比较(VOVO1,VOVO2){
if(vo1.getName().equals(“最后一项”)){
if(vo2.getName().equals(“最后一项”)){
返回0;
}否则{
返回1;
}
else if(vo2.getName().equals(“最后一项”)){
返回-1;
}
返回vo1.getName().compareTo(vo2.getName());
}
});
较短的实现
public static Comparator<PartyResultVO> sortData = new Comparator<PartyResultVO>() {
public int compare(VO vo1, VO vo2) {
return mapToLast(vol.getName()).compareTo(mapToLast(vo2.getName()));
}
String mapToLast(String s) {
return s.contains("LAST") ? "\uFFFF" : s;
}
}
publicstaticcomparatorsortdata=newcomparator(){
公共整数比较(VOVO1,VOVO2){
返回mapToLast(vol.getName()).compareTo(mapToLast(vo2.getName());
}
字符串映射last(字符串s){
返回s.contains(“LAST”)?“\uFFFF”:s;
}
}
确保比较两个“最后一项”不过,我们返回0。@KennyTM:这与排序无关,但它可能更完整。但我不确定名称是否正确。但它包含lastOn一词。一个不相关的注释:我上周在Keppil Way。@PSR您似乎能够键入contains
,所以我假设是这样。