簡體   English   中英

從Java中的對象列表中提取對象列表

[英]Extraction of list of objects from list of objects in Java

假設您有一個如下的A類:

public class A{
  private B b;

  public B getB(){return b;}
}

然后,您有一個A對象的列表,並且想要創建另一個包含相關B對象的列表,即

List<A> listOfA=...
List<B> listOfB = extractFrom(listOfA, "getB");

存在一個庫,該庫執行函數extractFrom描述的魔術嗎? 也許它使用反射,我不知道。 或者,庫可能依賴於使用泛型的Extractor接口,例如

public interface Extractor<T,V>{

  public T extract(V source);
}

然后執行以下操作:

Extractor ex=...;
List<B> listOfB = extractFrom(listOfA, ex);

PS:標題太可怕了! 請編輯標題,以使其更有意義。

有一個解決方案。 這使用了番石榴

您需要一個Function<A, B> ,然后使用Lists.transform()應用該函數:

final Function extractB = new Function<A, B>()
{
    @Override
    public B apply(final A input)
    {
        return input.getB();
    }
}

// And then:

final List<B> listOfB = Lists.transform(listOfA, extractB);

請注意,Java 8將具有Function ,以及Guava“發明”的其他FunctionPredicate是另一個示例)。

這就是所謂的地圖。

在這里有一個答案

此外,您可以使用變壓器使用Apache Commons

例如:

Collection<B> bs = CollectionUtils.collect(collectionOfA, new Transformer() {
    public Object transform(Object a) {
        return ((A) a).getB();
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM