【问题标题】:Concatenate arraylists连接数组列表
【发布时间】:2016-02-19 01:43:21
【问题描述】:

你能以某种方式将两个数组列表连接到第三个吗? 我知道你可以做到(如下所示):

ArrayList<String>arraylist1 = new ArrayList<>();
    ArrayList<String>arraylist2 = new ArrayList<>();

    ArrayList<String>al = new ArrayList<>();
    al.addAll(arraylist1);
    al.addAll(arraylist2);

但是如果你在不同的构造函数中有数组列表,你怎么做呢?:

ArrayList<People>arraylist1 = new ArrayList<>();
ArrayList<Billing>arraylist2 =new ArrayList<>();

【问题讨论】:

  • 你为什么要考虑将两个可能完全不同的类添加到一个 List 中?
  • 添加不同类型的 ArrayList 是个坏主意。当然,您可以将它们全部添加到对象的 ArrayList(原始)中,但这不是一件好事
  • 好的,那我最好别再浪费时间尝试解决这个问题了。哈哈。非常感谢您的帮助。
  • 但是,如果我有一个带有人员的构造函数和一个带有帐单的构造函数,并且我想将正确的帐单打印给正确的人......有什么想法吗?
  • @JJ72 使用 Map 代替。使用List 只会让一切变得更加困难。作为替代方案,您也可以仅在单个 People 实例中引用 BillingList,和/或在单个 Billing 实例中引用特定的 People 实例。

标签: java arraylist concatenation


【解决方案1】:

Collection&lt;E&gt;的方法addAll有签名

public boolean addAll(Collection<? extends E> c)

这里的通配符 (?) 表示它足够通用,可以接受 E 的任何子类型的任何集合。

这意味着,如果您的第三个列表的元素类型是两个原始列表类型的共同超类型(Object 将始终有效),您可以这样做。

例如打印[X, Y, 1, 2, 3]

List<String> list1 = Arrays.asList("X", "Y");
List<Integer> list2 = Arrays.asList(1, 2, 3);
List<Object> list3 = new ArrayList<>();
list3.addAll(list1);
list3.addAll(list2);
System.out.println(list3);

但通常最好尽量避免以这种方式使用混合类型的集合。

【讨论】:

  • 非常感谢。如果你们对我的基本问题有替代解决方案(用正确的帐单打印正确的人),请告诉我:)
  • @JJ72 人员和计费列表的长度是否相同?如果是这样,也许您需要一个包含字段personbilling 的新类?
  • @JJ72 正如我的评论中所建议的那样,您可以创建从 BillingPerson 和/或 vica verse 的引用,或者创建一个单独的类 Billingbook,其中包含类似 Map&lt;Person,List&lt;Billing&gt;&gt; 的内容您可以从哪里获取信息。
  • @JJ72 看起来你问了一个 XY 问题。 meta.stackexchange.com/questions/66377/what-is-the-xy-problem 听起来 Kevin Esche 是对的。
  • 嗯,不一定。假设您有姓名、出生日期、电话号码和地址的人。而计费有公司名称和地址。但我真的会考虑你的想法。我只是在努力学习,所以我可以灵活一点,哈哈。
猜你喜欢
  • 2014-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多