java 将两个列表合并在一起,替换为null的列表的null值

3bygqnnd  于 2023-01-04  发布在  Java
关注(0)|答案(2)|浏览(232)

我要合并具有这些条件的2个列表

List<int> A = {1,1,1,null,null,null,null,null,null};
List<int> B = {null,null,null,2,2,2,null,null,null};

合并后所需的结果

List<int> C = {1,1,1,2,2,2,null,null,null}

其中,list A中的null值将替换为list B中的值,另外,如果出现1 , null, 1, null这样的情况,我尝试将其用于循环,但会消耗大量性能,我需要一种适当的方法来执行此操作

for(int i = 0; i <A.size; i++) 
{
   for(int j=0 ;j <B.size; j++)

}
xienkqul

xienkqul1#

从我对这个问题的理解。

案例1:如果两个List大小相同,那么您可以使用Java流API编写一致的代码,而无需任何循环。

List<Integer> C = IntStream.range(0, A.size())
                .mapToObj(i -> {
                    Integer a = A.get(i);
                    Integer b = A.get(i);
                    if (a == null && b != null) {
                        return b;
                    } else if (a != null && b == null) {
                        return a;
                    } else {
                        // assuming when both the value are present
                        // you want to return from list A
                        return a;
                    }
                })
                .collect(Collectors.toList());

情况2:如果两个列表的大小可以不相等。

List<Integer> C = IntStream.range(0, Math.max(A.size(), B.size()))
                .mapToObj(i -> {
                    Integer a = i < A.size() ? A.get(i) : null;
                    Integer b = i < B.size() ? B.get(i) : null;

                    if (a == null && b != null) {
                        return b;
                    } else if (a != null && b == null) {
                        return a;
                    } else {
                        // assuming when both the value are present
                        // you want to return from list A
                        return a;
                    }
                })
                .collect(Collectors.toList());
zxlwwiss

zxlwwiss2#

你写的2个循环意味着你的代码运行内部位A * B次,这是你不想要的。你只想运行'A'次,假设A和B大小相等,或者max(A.size(), B.size())次,如果不相等。

var out = new ArrayList<Integer>();
for (int i = 0; i < a.size(); i++) {
  Integer v = a.get(0);
  if (v == null) v = b.get(0);
  out.add(v);
}

相关问题