集合类重写排序的方法

来源:互联网 发布:淘宝 举证有效规则 编辑:程序博客网 时间:2024/06/08 08:40

好了先贴下代码。首先建立实体类。point如下图

public class Point implements Serializable{
private String x;
private String y;
public String getX() {
return x;
}
public void setX(String x) {
this.x = x;
}
public String getY() {
return y;
}
public void setY(String y) {
this.y = y;
}
public Point(String x, String y) {
super();
this.x = x;
this.y = y;
}
public Point() {
super();
}
@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}

}

有实体类之后。我们重写实体类Points按照我们的要求排序。我们先手动赋值先。

建立新的比较测试类使用工具Collections重写Comparator的比较方法

public class TestComparator {
public static void main(String args[]){
List<Point> points = new ArrayList<Point>();
points.add(new Point("第一条","a"));
points.add(new Point("第一条","abc"));
points.add(new Point("第二条","abc"));
points.add(new Point("第二条","ab"));
points.add(new Point("第三条","a"));
points.add(new Point("第三条","abc"));
for(Point p:points){
System.out.println(p);
}
List<Point> tempPoints = new ArrayList<Point>();//临时的数组
List<Point> newPoints = new ArrayList<Point>();//新的点击数组
String str = "";//定义开始比较的字符串
for(int i=0;i<points.size();i++){
if(!str.equals(points.get(i).getX())){
tempPoints.clear();//先清空临时比较的数据
str = points.get(i).getX();
for(int j=i;j<points.size();j++){
if(str.equals(points.get(j).getX())){
tempPoints.add(points.get(j));//放入数组中
}else{
break;
}
}
Collections.sort(tempPoints, new Comparator<Point>(){
public int compare(Point p1, Point p2) {
return p1.getY().length()-p2.getY().length();
}

});
newPoints.addAll(tempPoints);
}
}
for(Point p:newPoints){

System.out.println(p);
}
}
}

好了打印结果如下图所示。我们可以看到x相同的情况下,y按照长度做了升序排序了

Point [x=第一条, y=a]
Point [x=第一条, y=abc]
Point [x=第二条, y=abc]
Point [x=第二条, y=ab]
Point [x=第三条, y=a]
Point [x=第三条, y=abc]
Point [x=第一条, y=a]
Point [x=第一条, y=abc]
Point [x=第二条, y=ab]
Point [x=第二条, y=abc]
Point [x=第三条, y=a]
Point [x=第三条, y=abc]

0 0
原创粉丝点击