两个list如何根据相同的信息连接?
比如List1中有a,b两个字段,list2中有a,c两个字段,怎么根据a的值相同连接起来?
List1:
a b
1 a
2 b
3 c
List2
a c
1 d
2 e
3 f
如何得到list3
1 a d
2 b e
3 c f 

解决方案 »

  1.   

    先将两个列表排序
    然后设置两个指示值p1,p2,如果p1指示的大于p2,移动p2,反之移动p1,如果相等,把p1、p2指示的数据添加到list3,并p1、p2均移动
      

  2.   

    List list1 = new ArrayList();
      String[] item1 = new String[]{"1", "a"};
      String[] item2 = new String[]{"2", "b"};
      String[] item3 = new String[]{"3", "c"};
      list1.add(item1);
      list1.add(item2);
      list1.add(item3);
      
      List list2 = new ArrayList();
      String[] item4 = new String[]{"1", "d"};
      String[] item5 = new String[]{"2", "e"};
      String[] item6 = new String[]{"3", "f"};
      list2.add(item4);
      list2.add(item5);
      list2.add(item6);
      
      String[] itemI = null;
      String[] itemJ = null;
      ArrayList result = new ArrayList();
      for (int i = 0; i < list1.size(); i++) {
       itemI = (String[])list1.get(i);
       for (int j = 0; j < list2.size(); j++) {
        itemJ = (String[])list2.get(j);
        if (itemI[0].equals(itemJ[0])) {
         result.add(new String[]{itemI[0], itemI[1], itemJ[1]});
        }
       }
      }
      
      String[] item = null;
      for (int i = 0; i < result.size(); i++) {
       item = (String[])result.get(i);
       System.out.println(item[0] + " " + item[1] + " " + item[2]);
      }
      

  3.   

    一个 List 元素中只能存一个值,你为什么可以存两个值?
      

  4.   

    感谢两位回答。
    不过现在的问题可能更复杂一点,就是可能有更多的字段:
    比如List1: a b c d e 
        List2: a b c f g
    要求a b c 三个字段相同的保留,然后合并,
    最后形成a b c d e f g
      

  5.   

    to bao110908(长牙了,好痛):
    不好意思。我说的简化了,其实就是一个list里面有map对象。
    如下所示:
    List<RowData> dataList = new ArrayList<RowData>();
    Map map = (Map) dataList.get(0);
      

  6.   

    我能想到的是用
    List.contains(o)
    或者List.indexOf(o)
    但是不知道该怎么用
      

  7.   

    很难看明白,其中的数据结构。map 中的 key 和 value 各是什么?数据的组织方式?因为这些不清楚的话,很难下手的。RowData 是什么样的东东,为什么可以强转成 Map 类型。疑惑多多。
      

  8.   

    map对象? 那你map对象的Key是什么?
      

  9.   

    我以为我说清楚了,真晕。
    RowData 就是一行的对象,
    map(key,value)类似这样的:
    比如map(1,a).
    感觉可能还没说清楚,
    这样吧,能告诉我
    List.contains(o)
    或者List.indexOf(o)
    这两个方法是干嘛用的吗?
      

  10.   

    contaions 检查 List 中是否有该对象,有返回 true,没有返回 falseindexOf 获得 List 中第一次出现该对象的索引点,没有时返回 -1。
      

  11.   

    哦,那我有个思路:
    把两个List中需要判断的是否相等的几个字段放到对象里
    比如:<a,b,c> <d,e>  (其中a,b,c需要判断)
    然后在一个list2里遍历list1的<a,b,c>,如果找到,就连接起来。
    不过List.contaions只能比较整个对像:<a,b,c> <d,e> 
    能不能比较其中的一部分呢?
      

  12.   

    @_@ 好想帮帮你,但是我实在是弄不清其中的结构。good luck
      

  13.   

    contains也解决不了你题目中提到的问题呀,它只能判断它自己的列表内的对象是否存在
    indexOf是返回对象在列表中的index,更与你的题目没有关系
      

  14.   

    bao110908(长牙了,好痛) ,sureyor() ( ) 两位大哥留下联系方式,或者加我QQ:37727640好吗?今天务必要解决这个问题,多谢二位了~!
      

  15.   

    楼主的这个问题其实很容易解决:
    用一个List保存所有的Key,比如题目中的1,2,3或者你说的a,b,c当然a,b,c需要拼起来,如果是复杂对象就另当别论啦
    用两个hashmap保存[1,a],[1,b],[1,c]和[1,d],[1,e],[1,f],然后遍历list,根据key去两个hashmap中判断是否有存在的对象,如果都有就拼起来,存放到一个list中
      

  16.   

    1个hashMap就够了,已经测试过
    public static void main(String[] args) {  

    List list1 = new ArrayList();
      String[] item1 = new String[]{"1", "a"};
      String[] item2 = new String[]{"2", "b"};
      String[] item3 = new String[]{"3", "c"};
      list1.add(item1);
      list1.add(item2);
      list1.add(item3);
      
      List list2 = new ArrayList();
      String[] item4 = new String[]{"1", "d"};
      String[] item5 = new String[]{"2", "e"};
      String[] item6 = new String[]{"3", "f"};
      list2.add(item4);
      list2.add(item5);
      list2.add(item6);
      
      List resultList=new ArrayList();
      Map tempMap=new HashMap();
      Iterator it2 = list2.iterator();
      String[] tempArray=null;
      while(it2.hasNext()){
      tempArray=(String[])it2.next();
      tempMap.put(tempArray[0],tempArray[1]);
      }
      Iterator it1 = list1.iterator();
      while(it1.hasNext()){
      tempArray=(String[])it1.next();
      if(tempMap.get(tempArray[0])!=null){
      String[] resultArray=new String[3];
      resultArray[0]=tempArray[0];
      resultArray[1]=tempArray[1];
      resultArray[2]=String.valueOf(tempMap.get(tempArray[0]));
      resultList.add(resultArray);
      }
      }
      Iterator itResult =resultList.iterator();
      while(itResult.hasNext()){
      tempArray=(String[])itResult.next();
      for(int i=0;i<tempArray.length;i++){
      System.out.print(tempArray[i]);
      }
      System.out.println();
      }
      
    }
      

  17.   


    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.ArrayList;public class guess {
        public static void main(String[] args) {
            HashMap map=new HashMap();
            HashMap map2=new HashMap();
            ArrayList list=new ArrayList();
            
            map.put("1","a");
            map.put("2","b");
            map.put("3","c");
            
            map2.put("1","d");
            map2.put("2","e");
            map2.put("3","f");
            
            Iterator it=map.keySet().iterator();
            
            while(it.hasNext())
            {
                Object obj=it.next();
                String[] arr=new String[3];
                arr[0]=String.valueOf(obj);
                arr[1]=String.valueOf(map.get(obj));
                arr[2]=String.valueOf(map2.get(obj));
                list.add(arr);
            }
            
            for (int i=0;i<list.size();i++)
            {
                String[] arr=(String[])list.get(i);
                for (String a:arr)
                {
                    System.out.print(a+"\t");
                }
                System.out.println("");
            }
        }
    }