【问题标题】:Add one attributes from a Collection of Objects to another Collection将对象集合中的一个属性添加到另一个集合
【发布时间】:2019-10-01 15:19:52
【问题描述】:

考虑以下模型类:

class A{
    String a;
    int b;
}

我将它用作我的一种方法中的参数,例如:

 class B{
      public static ArrayList<String> listOfAs;
      public void abc(Collection<A> collectionOfA){
      //I want a best way to create a collection of attribute 'a'.
      // I want listOfAs to be populated with the collection of a
      }
 }

如果可以跳过对 collectionOfA 的迭代,那就太好了!谢谢

【问题讨论】:

  • "如果可以跳过对 collectionOfA 的迭代" 你认为如何避免这种情况?如何在不查看所有As 的情况下从As 集合中获取所有a 值?
  • 我同意@Andy Turner,我想找到一种最好、最有效的方法来实现这一点。事实证明,无论我们使用流还是任何其他方法,复杂性都是一样的。

标签: java object arraylist collections iterator


【解决方案1】:

您可以避免使用流显式跳过,但在引擎盖下它当然会迭代:

listOfAs = collectionOfA.stream().map(A::getA).collect(toList());

请注意,它需要定义一个公共的String getA() 方法并为该字段定义一个List 而不是ArrayList,这是一个很好的做法。

如果您确实需要将 ArrayList 保留为声明字段,您仍然可以这样做:

listOfAs = collectionOfA.stream().map(A::getA).collect(toCollection(ArrayList::new);

请注意,如果列表应该更新而不仅仅是覆盖,您可以使用addAll()

List<String> list = collectionOfA.stream().map(A::getA).collect(toList());
listOfAs.addAll(list);

【讨论】:

  • “请注意,它需要”,但您可以只写 e -&gt; e.a 而不是 A::getA
  • 正确,如果 A 和 B 在同一个包中。根据发布的代码,可能是这种情况,但我对问题示例代码中使用的私有包修饰符持谨慎态度
  • 如果不在同一个包中,B 能否访问 A?
猜你喜欢
  • 1970-01-01
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 2013-07-31
相关资源
最近更新 更多