public static List <Record> sortip(List <Record> recordList){
compareip comparator=new compareip();
Collections.sort(recordList, comparator);
return recordList;
}调用接口为
class compareipimplements Comparator{
public int compare(Object arg0, Object arg1) {
Record user0=(Record)arg0;
Record user1=(Record)arg1;
return user0.getip().compareTo(user1.getip());
}
}1程序执行没有错误 瞎奶有个 字段是ip地址 (如12。121。233。2)
等。 发现compareTo没有能力对 ip字段进行排序。
现在如何修改代码才鞥让ip字段的 list 排序??
2另外有个字段是 phone
表里这个字段值不规范 如
+1232323213
+9231235454
809002
+34324234
。
还有很多空值
compareto也没偶能力为这个字段进行排序
(我的想法先判度是否有+ 如果有去掉
号码大小来排序)
compareip comparator=new compareip();
Collections.sort(recordList, comparator);
return recordList;
}调用接口为
class compareipimplements Comparator{
public int compare(Object arg0, Object arg1) {
Record user0=(Record)arg0;
Record user1=(Record)arg1;
return user0.getip().compareTo(user1.getip());
}
}1程序执行没有错误 瞎奶有个 字段是ip地址 (如12。121。233。2)
等。 发现compareTo没有能力对 ip字段进行排序。
现在如何修改代码才鞥让ip字段的 list 排序??
2另外有个字段是 phone
表里这个字段值不规范 如
+1232323213
+9231235454
809002
+34324234
。
还有很多空值
compareto也没偶能力为这个字段进行排序
(我的想法先判度是否有+ 如果有去掉
号码大小来排序)
import java.util.Comparator;
public class Record implements Comparator<Record>{
private String ip;
public Record(String ip){
this.ip=ip;
}
public int compare(Record ra, Record rb) {
int raIp=Integer.parseInt(ra.ip.split("\\.")[0]);
int rbIp=Integer.parseInt(rb.ip.split("\\.")[0]);
return raIp>rbIp?1:(ra.ip.equals(rb.ip)?1:-1);
}
public String getIp(){
return this.ip;
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import com.state.cn.Record;
public class Test {
public static void main(String[] args){
List<Record> list=new ArrayList<Record>();
list.add(new Record("192.168.2.254"));
list.add(new Record("172.168.2.254"));
list.add(new Record("123.168.2.254"));
list.add(new Record("91.168.2.254"));
list.add(new Record("27.168.2.254"));
list.add(new Record("36.168.2.254"));
list.add(new Record("54.168.2.254"));
Collections.sort(list,new Comparator<Record>(){
public int compare(Record ra, Record rb) {
int raIp=Integer.parseInt(ra.getIp().split("\\.")[0]);
int rbIp=Integer.parseInt(rb.getIp().split("\\.")[0]);
return raIp>rbIp?1:(ra.getIp().equals(rb.getIp())?1:-1);
}
});
for(Record r:list)
System.out.println(r.getIp());
}
}
private String ip;
public Record(String ip){
this.ip=ip;
}
public String getIp(){
return this.ip;
}
}
我建议把ip存成整数排序会更好看一些
第2个问题 2另外有个字段是 phone
表里这个字段值不规范 如
+1232323213
+9231235454
809002
+34324234
。
还有很多空值
compareto也没偶能力为这个字段进行排序
(我的想法先判度是否有+ 如果有去掉
号码大小来排序)
------------有人建议用正则表达式做 (从字符串中数字开头的地方取数字
如 pattern.compile (+(\\d))?? 不知道如何写这个 并应用
)
public int compare(Record ra, Record rb) {
int raIp=Integer.parseInt(ra.getIp().split("\\.")[0]);
int rbIp=Integer.parseInt(rb.getIp().split("\\.")[0]);
return raIp>rbIp?1:(ra.getIp().equals(rb.getIp())?1:-1);
}
});这只是比较每个IP的第一个字节比如我输入input
list.add(new Record("1","1","1","1","1","1","1","1","1","192.168.2.254"));
list.add(new Record("1","1","1","1","1","1","1","1","1","192.168.2.25"));
list.add(new Record("1","1","1","1","1","1","1","1","1","123.168.2.254"));
list.add(new Record("1","1","1","1","1","1","1","1","1","91.168.2.254"));
list.add(new Record("1","1","1","1","1","1","1","1","1","192.168.112.25"));
list.add(new Record("1","1","1","1","1","1","1","1","1","36.168.2.254"));
list.add(new Record("1","1","1","1","1","1","1","1","1","54.168.2.254"));my结果
36.168.2.254
54.168.2.254
91.168.2.254
123.168.2.254
192.168.2.254
192.168.2.25
192.168.112.25实际上第2个 第3 第4都需要判断的
比如
192.168.2.25
应该在192.168.2.254
的前面
192.168.112.25
应该在192的最前面
36.168.2.254
54.168.2.254
91.168.2.254
192.168.112.25
192.168.2.25
123.168.2.254
192.168.2.254
请问代码如何再改写哦
int j=0;
int i=0;
long [] ip=new long[4];
int position1=strIP.indexOf(".");
int position2=strIP.indexOf(".",position1+1);
int position3=strIP.indexOf(".",position2+1);
ip[0]=Long.parseLong(strIP.substring(0,position1));
ip[1]=Long.parseLong(strIP.substring(position1+1,position2));
ip[2]=Long.parseLong(strIP.substring(position2+1,position3));
ip[3]=Long.parseLong(strIP.substring(position3+1));
return (ip[0]<<24)+(ip[1]<<16)+(ip[2]<<8)+ip[3]; //ip1*256*256*256+ip2*256*256+ip3*256+ip4
} public static void main(String[] args) throws Exception {
List<Record> list=new ArrayList<Record>();
list.add(new Record("1","1","1","1","1","1","1","1","1","192.168.2.254"));
list.add(new Record("1","1","1","1","1","1","1","1","1","192.168.2.25"));
list.add(new Record("1","1","1","1","1","1","1","1","1","123.168.2.254"));
list.add(new Record("1","1","1","1","1","1","1","1","1","91.168.2.254"));
list.add(new Record("1","1","1","1","1","1","1","1","1","192.168.112.25"));
list.add(new Record("1","1","1","1","1","1","1","1","1","36.168.2.254"));
list.add(new Record("1","1","1","1","1","1","1","1","1","54.168.2.254"));
Collections.sort(list,new Comparator<Record>(){
public int compare(Record ra, Record rb) {
// if ((startDate==null) || (startDate.equals("")))
//int raIp=Integer.parseInt(ra.getIpStr().split("\\.")[0]);
//int rbIp=Integer.parseInt(rb.getIpStr().split("\\.")[0]);
long a;
long b;
a=ipToLong(ra.getIpStr());
b=ipToLong(rb.getIpStr());
return a>b?1:-1;
//if(a>b)
这个仅仅比较了第1个int只是还不是很理想的那种,需要4个int都进行比较的那种如何写?