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

问题描述 投票:0回答:2

我想合并 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}

其中

null
中的
list A
值将替换为
list B
中的值,另外,如果存在像
1 , null, 1, null
这样的情况,我尝试将它用于循环,但我花费了很多性能,我想要一个正确的做法

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

}
java spring list merge java-stream
2个回答
0
投票

根据我对问题的理解。

情况 1:如果两个列表大小相等,那么您可以使用 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());

-1
投票
您编写的

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.