Java 将一个属性从一个对象集合添加到另一个集合

Java 将一个属性从一个对象集合添加到另一个集合,java,object,arraylist,collections,iterator,Java,Object,Arraylist,Collections,Iterator,考虑到以下模型等级: 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

考虑到以下模型等级:

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的迭代,那就太好了!谢谢

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

listOfAs = collectionOfA.stream().map(A::getA).collect(toList());
请注意,它需要定义一个公共字符串getA方法,并为字段定义一个列表而不是ArrayList,这是一个很好的实践

如果确实需要将ArrayList保留为声明字段,您仍然可以执行以下操作:

listOfAs = collectionOfA.stream().map(A::getA).collect(toCollection(ArrayList::new);
请注意,如果列表应该更新而不仅仅是覆盖,则可以使用addAll:


如果可以跳过对collectionOfA的迭代,您认为如何避免这种情况?你怎么能在不查看所有As的情况下从As集合中获得所有a值呢?我同意@Andy Turner,我想找到一种最佳且高效的方法来实现这一点。无论我们使用streams还是任何其他方法,复杂度都是一样的。请注意,它需要,但如果a和B在同一个包中,您可以只编写e->e.a而不是a::getA.Right。根据发布的代码,可能是这样的,但我对问题示例代码B中使用的私有包修饰符保持警惕,如果它们不在同一个包中,B是否能够访问A?
List<String> list = collectionOfA.stream().map(A::getA).collect(toList());
listOfAs.addAll(list);