两个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
19 个解决方案
#1
先将两个列表排序
然后设置两个指示值p1,p2,如果p1指示的大于p2,移动p2,反之移动p1,如果相等,把p1、p2指示的数据添加到list3,并p1、p2均移动
然后设置两个指示值p1,p2,如果p1指示的大于p2,移动p2,反之移动p1,如果相等,把p1、p2指示的数据添加到list3,并p1、p2均移动
#2
依此循环直到列表尾
#3
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]);
}
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]);
}
#4
一个 List 元素中只能存一个值,你为什么可以存两个值?
#5
感谢两位回答。
不过现在的问题可能更复杂一点,就是可能有更多的字段:
比如List1: a b c d e
List2: a b c f g
要求a b c 三个字段相同的保留,然后合并,
最后形成a b c d e f g
不过现在的问题可能更复杂一点,就是可能有更多的字段:
比如List1: a b c d e
List2: a b c f g
要求a b c 三个字段相同的保留,然后合并,
最后形成a b c d e f g
#6
to bao110908(长牙了,好痛):
不好意思。我说的简化了,其实就是一个list里面有map对象。
如下所示:
List<RowData> dataList = new ArrayList<RowData>();
Map map = (Map) dataList.get(0);
不好意思。我说的简化了,其实就是一个list里面有map对象。
如下所示:
List<RowData> dataList = new ArrayList<RowData>();
Map map = (Map) dataList.get(0);
#7
list里放的是个对象
#8
我能想到的是用
List.contains(o)
或者List.indexOf(o)
但是不知道该怎么用
List.contains(o)
或者List.indexOf(o)
但是不知道该怎么用
#9
很难看明白,其中的数据结构。map 中的 key 和 value 各是什么?数据的组织方式?因为这些不清楚的话,很难下手的。RowData 是什么样的东东,为什么可以强转成 Map 类型。疑惑多多。
#10
map对象? 那你map对象的Key是什么?
#11
我以为我说清楚了,真晕。
RowData 就是一行的对象,
map(key,value)类似这样的:
比如map(1,a).
感觉可能还没说清楚,
这样吧,能告诉我
List.contains(o)
或者List.indexOf(o)
这两个方法是干嘛用的吗?
RowData 就是一行的对象,
map(key,value)类似这样的:
比如map(1,a).
感觉可能还没说清楚,
这样吧,能告诉我
List.contains(o)
或者List.indexOf(o)
这两个方法是干嘛用的吗?
#12
contaions 检查 List 中是否有该对象,有返回 true,没有返回 false
indexOf 获得 List 中第一次出现该对象的索引点,没有时返回 -1。
indexOf 获得 List 中第一次出现该对象的索引点,没有时返回 -1。
#13
哦,那我有个思路:
把两个List中需要判断的是否相等的几个字段放到对象里
比如:<a,b,c> <d,e> (其中a,b,c需要判断)
然后在一个list2里遍历list1的<a,b,c>,如果找到,就连接起来。
不过List.contaions只能比较整个对像:<a,b,c> <d,e>
能不能比较其中的一部分呢?
把两个List中需要判断的是否相等的几个字段放到对象里
比如:<a,b,c> <d,e> (其中a,b,c需要判断)
然后在一个list2里遍历list1的<a,b,c>,如果找到,就连接起来。
不过List.contaions只能比较整个对像:<a,b,c> <d,e>
能不能比较其中的一部分呢?
#14
@_@ 好想帮帮你,但是我实在是弄不清其中的结构。good luck
#15
contains也解决不了你题目中提到的问题呀,它只能判断它自己的列表内的对象是否存在
indexOf是返回对象在列表中的index,更与你的题目没有关系
indexOf是返回对象在列表中的index,更与你的题目没有关系
#16
bao110908(长牙了,好痛) ,sureyor() ( ) 两位大哥留下联系方式,或者加我QQ:37727640好吗?今天务必要解决这个问题,多谢二位了~!
#17
楼主的这个问题其实很容易解决:
用一个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中
用一个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中
#18
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();
}
}
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();
}
}
#19
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("");
}
}
}
#20
#1
先将两个列表排序
然后设置两个指示值p1,p2,如果p1指示的大于p2,移动p2,反之移动p1,如果相等,把p1、p2指示的数据添加到list3,并p1、p2均移动
然后设置两个指示值p1,p2,如果p1指示的大于p2,移动p2,反之移动p1,如果相等,把p1、p2指示的数据添加到list3,并p1、p2均移动
#2
依此循环直到列表尾
#3
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]);
}
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]);
}
#4
一个 List 元素中只能存一个值,你为什么可以存两个值?
#5
感谢两位回答。
不过现在的问题可能更复杂一点,就是可能有更多的字段:
比如List1: a b c d e
List2: a b c f g
要求a b c 三个字段相同的保留,然后合并,
最后形成a b c d e f g
不过现在的问题可能更复杂一点,就是可能有更多的字段:
比如List1: a b c d e
List2: a b c f g
要求a b c 三个字段相同的保留,然后合并,
最后形成a b c d e f g
#6
to bao110908(长牙了,好痛):
不好意思。我说的简化了,其实就是一个list里面有map对象。
如下所示:
List<RowData> dataList = new ArrayList<RowData>();
Map map = (Map) dataList.get(0);
不好意思。我说的简化了,其实就是一个list里面有map对象。
如下所示:
List<RowData> dataList = new ArrayList<RowData>();
Map map = (Map) dataList.get(0);
#7
list里放的是个对象
#8
我能想到的是用
List.contains(o)
或者List.indexOf(o)
但是不知道该怎么用
List.contains(o)
或者List.indexOf(o)
但是不知道该怎么用
#9
很难看明白,其中的数据结构。map 中的 key 和 value 各是什么?数据的组织方式?因为这些不清楚的话,很难下手的。RowData 是什么样的东东,为什么可以强转成 Map 类型。疑惑多多。
#10
map对象? 那你map对象的Key是什么?
#11
我以为我说清楚了,真晕。
RowData 就是一行的对象,
map(key,value)类似这样的:
比如map(1,a).
感觉可能还没说清楚,
这样吧,能告诉我
List.contains(o)
或者List.indexOf(o)
这两个方法是干嘛用的吗?
RowData 就是一行的对象,
map(key,value)类似这样的:
比如map(1,a).
感觉可能还没说清楚,
这样吧,能告诉我
List.contains(o)
或者List.indexOf(o)
这两个方法是干嘛用的吗?
#12
contaions 检查 List 中是否有该对象,有返回 true,没有返回 false
indexOf 获得 List 中第一次出现该对象的索引点,没有时返回 -1。
indexOf 获得 List 中第一次出现该对象的索引点,没有时返回 -1。
#13
哦,那我有个思路:
把两个List中需要判断的是否相等的几个字段放到对象里
比如:<a,b,c> <d,e> (其中a,b,c需要判断)
然后在一个list2里遍历list1的<a,b,c>,如果找到,就连接起来。
不过List.contaions只能比较整个对像:<a,b,c> <d,e>
能不能比较其中的一部分呢?
把两个List中需要判断的是否相等的几个字段放到对象里
比如:<a,b,c> <d,e> (其中a,b,c需要判断)
然后在一个list2里遍历list1的<a,b,c>,如果找到,就连接起来。
不过List.contaions只能比较整个对像:<a,b,c> <d,e>
能不能比较其中的一部分呢?
#14
@_@ 好想帮帮你,但是我实在是弄不清其中的结构。good luck
#15
contains也解决不了你题目中提到的问题呀,它只能判断它自己的列表内的对象是否存在
indexOf是返回对象在列表中的index,更与你的题目没有关系
indexOf是返回对象在列表中的index,更与你的题目没有关系
#16
bao110908(长牙了,好痛) ,sureyor() ( ) 两位大哥留下联系方式,或者加我QQ:37727640好吗?今天务必要解决这个问题,多谢二位了~!
#17
楼主的这个问题其实很容易解决:
用一个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中
用一个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中
#18
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();
}
}
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();
}
}
#19
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("");
}
}
}