繁体   English   中英

将两个列表合并到一个新列表中,索引到同一索引,但不增加长度

[英]Merging two lists into a new list, index to same index, while not adding to length

我试图将两个列表合并到一个新列表中,并且两个列表的所有值都与原始列表保持相同的索引,同时不增加新列表的长度。 列表A在随机索引处包含一个数字,一些为空,数字在1-3之间。 列表B在所有索引上均包含数字123。 我尝试使用for循环和列表添加,但是随后它给了我indexoutofbounds,因为似乎列表添加在添加值时会推送列表的内容。 我现在正在尝试使用哈希图:

清单:

Int arraylength = 10;

ArrayList<Integer> mergeballs = new ArrayList<>(arraylength); // merging list A
// contenent: null,3,null,null,2,3,null,1,null,2

ArrayList<Integer> hats = new ArrayList<>(arraylength); // merging list B
//contenent: 123,123,123,123,123,123,123,123,123,123


ArrayList<Integer> hatsMerged = new ArrayList<Integer>(arraylength); // A & B merged
for (int o = 0; o < stickarray.length; o++) {
    HashMap<Integer, Integer> map = new HashMap<Integer, Integer (arraylength);
    map.put(o, hats.get(o) + mergeballs.get(o));
    hatsMerged.add(o,map.get(o));
    System.out.print(hatsMerged.get(o));
}

有了这段代码,即时消息还使索引越界,帽子和合并球得到了汇总,这是我不想要的。 我希望它是:123,1233,123,123,1232,1233,123,1231,123,1232

我怎样才能做到这一点? 哈希图是最好的选择吗?

这是一种执行您似乎要求的方法。 忽略null ,则转换int到一个String -然后串联另一intString并转换回一个int用于存储在合并List<Integer> 就像是,

public static List<Integer> merge(List<Integer> a, List<Integer> b) {
    List<Integer> al = new ArrayList<>();
    for (int i = 0; i < a.size(); i++) {
        Integer val = a.get(i);
        StringBuilder sb = new StringBuilder();
        if (val != null) {
            sb.append(val);
        }
        Integer bv = b.get(i);
        if (bv != null) {
            sb.append(bv);
        }
        try {
            al.add(Integer.parseInt(sb.toString()));
        } catch (NumberFormatException nfe) {
            nfe.printStackTrace();
        }
    }
    return al;
}

public static void main(String[] args) {
    List<Integer> a = Arrays.asList(123, 123, 123, 123, 123, 123, 123, 123,
            123, 123);
    List<Integer> b = Arrays.asList(null, 3, null, null, 2, 3, null, 1,
            null, 2);
    List<Integer> merged = merge(a, b);
    System.out.println(merged);
}

输出是(请求的)-

[123, 1233, 123, 123, 1232, 1233, 123, 1231, 123, 1232]

您无需使用hashmap。 您可以只检查空值并用零代替,然后添加并合并两个列表之间的值。 您可以通过将mergeballs.get(0)分配给Integer局部变量并在条件表达式中使用它来避免两次get调用。

    Integer result;
    ArrayList<Integer> hatsMerged = new ArrayList<Integer>(arraylength); // A & B merged
    for (int o = 0; o < arraylength; o++) {
        result = ((mergeballs.get(o) == null) ? 0 : mergeballs.get(o)) + ((hats.get(o) == null) ? 0 : hats.get(o));
        hatsMerged.add(result);
        System.out.print(hatsMerged.get(o));
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM