如何在java中连接两个列表?

时间:2017-11-06 00:32:27

标签: java java-7

我希望将列表1中的空值替换为从列表2的同一列进行corepand它们的值,结果将存储在列表3中。

List<Date> list1 = Arrays.asList(opDate1, null, opDate2, null, opDate3);
List<Date> list2 = Arrays.asList(date1, date2, date3, date4, date5);

结果:

List<Date> list3 = Arrays.asList(opDate1, date2, opDate2, date4, opDate3);

我该怎么办?

更新

我的代码:

public List<Date> concatList(List<Date> list1, List<Date> list2) {
    List<Date> list3 = new ArrayList<Date>();
    for(int i=0; i<list1.size();i++){
        for(int j=0; i<list2.size();j++){
        if(list1.get(i) == null)
            list3.add(list2.get(j));
        else
            list3.add(list1.get(i));
        }
    }
    return list3;
}

5 个答案:

答案 0 :(得分:2)

试试这个

List<String> list3 = new ArrayList<>(list1.size());
for (int i=0;i<list1.size();i++) {
    if (list1.get(i) == null) {
        list3.add(i,list2.get(i));
    } else {
        list3.add(i,list1.get(i));
    }
}

答案 1 :(得分:1)

使用for循环。在循环中,使用if语句。 如果特定点的值为null,则将其替换为其他List

中的相同位置值

答案 2 :(得分:1)

List<String> list3 = new ArrayList<>();
ListIterator<String> iter1 = list1.listIterator();
ListIterator<String> iter2 = list2.listIterator();
while(iter1.hasNext()) {
    String a = iter1.next();
    String b = iter2.next();
    if(a!=null) {
        list3.add(a);
    }
    else{
     list3.add(b);
    }
}

由于您需要访问每个元素,因此不要对每个i使用list.get(i),因为这将给出复杂度O(n ^ 2)而不是O(n)

答案 3 :(得分:0)

试试这个

List<String> list3 = new ArrayList<>();
for (int i = 0;i <list1.size();i++) {
    list3.add(list1.get(i) != null ? list1.get(i) : list2.get(i));
}

答案 4 :(得分:0)

我认为它有效

public List<Date> concatList(List<Date> list1, List<Date> list2) {
    List<Date> list3 = new ArrayList<Date>();

    /* here you will remove all null in your list*/
    list1.removeIf(Objects::isNull);   
    list2.removeIf(Objects::isNull);

    /* here you will add both list inside list3*/
    list3.addAll(list1);
    list3.addAll(list2);
}