好了先贴下代码。首先建立实体类。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]