List中存放着从数据库中查询出的对象MapVO,数据如下:
city    x      y
 cA     119   126
 cB     162   56
 cC     59    16
 cE     162   56
 cF     162   56
try{
  List lt_xy=bo.electronicMapInfo(request, frm); 
  for(int i=0;i<lt_xy.size();i++){
MapVO vo=(MapVO)lt_xy.get(i);
        //这里如何逐一对每条数据里的x y字段进行比较判断,若存在相同的xy如:(cB,cE,cF)  ????
       
       System.out.println(vo.getCity()+"  "+vo.getX()+ " "+vo.getY());
       
   }
}
希望结果是:
cB 
cE 
cF  162 56
cA  119 126
cC  59  16   

解决方案 »

  1.   


    public void abc_sort(List<MapVO> lt_xy){
    Map<int[],List<MapVO>> nl = new HashMap<int[],List<MapVO>>();

    for(MapVO mv:lt_xy){
    boolean existed = false;
    for(int[] xy:nl.keySet()){
    if(xy[0]==mv.getX() && xy[1]==mv.getY()){
    existed = true;
    nl.get(xy).add(mv);
    break;
    }
    }

    if(!existed){
    int[] xy = new int[]{mv.getX(),mv.getY()};
    nl.put(xy, new ArrayList<MapVO>());
    nl.get(xy).add(mv);
    }

    }

    }
    打印你就自己写下吧
      

  2.   

    在取数据的时候用一个加一点group by y,x才行。按照顺序去放这些数就是xy都相同的话它们会连着放city    x      y 
     cA     119   126 
     cB     162   56 
     cC     59    16 
     cE     162   56 
     cF     162   56 而是变成下边这样city    x      y 
     cA     119   126  
     cC     59    16 
     cB     162   56
     cE     162   56 
     cF     162   56显示的时候用探测下一个的xy来决定是否显示当前的。int x=-1,y=-1;
      if(lt_xy.size()>1)
      {
         for(int i=0;i <lt_xy.size()-1;i++){ 
        MapVO vo=(MapVO)lt_xy.get(i); 
        MapVO vo2=(MapVO)lt_xy.get(i+1);  
        if(vo.getX()==vo2.getX()&&vo.getY()==vo2.getY())
        {
           System.out.println(vo.getCity()); 
        }else{
           System.out.println(vo.getCity()+"  "+vo.getX()+ " "+vo.getY()); 
        }      
       } 
       MapVO vo=(MapVO)lt_xy.get(i); 
       System.out.println(vo.getCity()+"  "+vo.getX()+ " "+vo.getY()); 
     }else
      {
           MapVO vo=(MapVO)lt_xy.get(0); 
           System.out.println(vo.getCity()+"  "+vo.getX()+ " "+vo.getY());   
      }
    我的代码是假设至少有一个以上.0的个情况没有去排除
      

  3.   

    过滤list嘛以x,y为key 将他们分类储存
    保存在Map<int[],List<MapVO>> nl里
    每个x,y对应一个List<MapVO>就是
    129,126: cA     119   126 
    162,56: cB     162   56, cE     162   56 , cF     162   56 
    59,16: cC     59    16 
      

  4.   

    干嘛不直接在写SQL语句的时候去掉重复的?
      

  5.   

    谢谢大家
    从新更正下:
    city    x      y 
     cA     119   126 
     cB     162   56 
     cC     59    16 
     cE     162   56 
     cF     162   56 
     cG     59    16打印结果是: 
    cB,cE,cF  162 56 
    cA        119 126 
    cC,cG     59  16 AWUSOFT 代码不对啊,好像最后一个值判断有误
      

  6.   

    要你这样的结果还是可以利用我的那些代码啊,不知道我 的在哪个地方有误啊,我是没有进行测试,理论上是可以的if(lt_xy.size()>1)
      {
         for(int i=0;i <lt_xy.size()-1;i++){ 
        MapVO vo=(MapVO)lt_xy.get(i); 
        MapVO vo2=(MapVO)lt_xy.get(i+1);  
        if(vo.getX()==vo2.getX()&&vo.getY()==vo2.getY())
        {
           System.out.print(vo.getCity()+","); //这里改一下就可以完成你的要求了,不过格式不能对齐哦,不过我想怎么样都无法对齐的啦,因为有些city长一点就不能对齐了.
        }else{
           System.out.println(vo.getCity()+"  "+vo.getX()+ " "+vo.getY()); 
        }      
       } 
       MapVO vo=(MapVO)lt_xy.get(i); 
       System.out.println(vo.getCity()+"  "+vo.getX()+ " "+vo.getY()); 
     }else
      {
           MapVO vo=(MapVO)lt_xy.get(0); 
           System.out.println(vo.getCity()+"  "+vo.getX()+ " "+vo.getY());   
      }原理差不多就是这样的,哪个地方可以类型合理可以改一下啊
      

  7.   


    import java.util.*;
    public class  MovVO
    {
    private String city;
    private int x;
    private int y;
    public MovVO(){}
    public MovVO(String c,int x,int y)
    {
    this.city = c;this.x=x;this.y=y;
    }
    public int getY()
    {return y;}
    public int getX()
    {return x;}
    public String getCity()
    {
    return city;
    }
    public static void main(String []args)
    {
    List lt_xy = new ArrayList<MovVO>();
    lt_xy.add(new MovVO("cA",119,126));
    lt_xy.add(new MovVO("cB",162,56));
    lt_xy.add(new MovVO("cE",162,56));
    lt_xy.add(new MovVO("cF",162,56));
    lt_xy.add(new MovVO("cC",59,16));
    lt_xy.add(new MovVO("cG",59,16));
    if(lt_xy.size()>1)
      {
    int i=0;
         for(i=0;i <lt_xy.size()-1;i++){ 
        MovVO vo=(MovVO)lt_xy.get(i); 
        MovVO vo2=(MovVO)lt_xy.get(i+1);  
        if(vo.getX()==vo2.getX()&&vo.getY()==vo2.getY())
        {
           System.out.print(vo.getCity()+","); //这里改一下就可以完成你的要求了,不过格式不能对齐哦,不过我想怎么样都无法对齐的啦,因为有些city长一点就不能对齐了.
        }else{
           System.out.println(vo.getCity()+"  "+vo.getX()+ " "+vo.getY()); 
        }      
       } 
       MovVO vo=(MovVO)lt_xy.get(i); 
       System.out.println(vo.getCity()+"  "+vo.getX()+ " "+vo.getY()); 
     }else
      {
           MovVO vo=(MovVO)lt_xy.get(0); 
           System.out.println(vo.getCity()+"  "+vo.getX()+ " "+vo.getY());   
      }
    }
    }