簡體   English   中英

Java-從超類的ArrayList中選出子類

[英]Java - Sorting out subclass from ArrayList of superclass

我有一個ArrayList,其中包含超類的對象和一些子類的對象。 我們稱它們為subclass1和subclass2。

有沒有辦法我可以去ArrayList並辨別哪些對象是SuperClass,subclass1和subclass2。 因此,我可以將它們放入ArrayList和ArrayList中。

這是一個過於簡化的版本,但它演示了我希望做的事情。

    public class food{
    private String name;
    public food(String name){
        this.name = name;
    }
}   

public class pudding extends food{
    public pudding(String name){
        super(name);
    }
}

public class breakfast extends food{
    public breakfast(String name){
        super(name);
    }
}

public static void main(String args[]){
    ArrayList<food> foods = new ArrayList();

    foods.add(new food("Sausage"));
    foods.add(new food("Bacon"));
    foods.add(new pudding("cake"));
    foods.add(new breakfast("toast"));
    foods.add(new pudding("sponge"));
    foods.add(new food("Rice"));
    foods.add(new breakfast("eggs"));

    ArrayList<pudding> puds = new ArrayList();
    ArrayList<breakfast> wakeupjuices = new ArrayList();

    for(food f : foods){
        //if(f is pudding){puds.add(f);}
        //else if(f is breakfast){wakeupjuices.add(f);}
    }

}

您可以使用instanceof關鍵字檢查所需的類型, instanceof

for (food f : foods)
{
    if (f instanceof pudding)
        puds.add(f);
    else if (f instanceof breakfast)
        wakeupjuices.add(f);
}

這可以通過Guava使用Multimaps.index 優雅地解決:

    Function<food, String> filterFood = new Function<food, String>() {
        @Override
        public String apply(food input) {

            if (input instanceof pudding) {
                return "puddings";
            }
            if (input.b instanceof breakfast) {
                return "breakfasts";
            }
            return "something else";
        }
    };

    ImmutableListMultimap<String, food> separatedFoods = Multimaps.index(list, filterFood);

輸出將是帶有三個單獨條目的Guava Multimap ,用於:

  1. 一個不可變的列表,其中所有早餐實例均在“早餐”鍵下。
  2. 一個不可變的列表,其中所有布丁實例位於鍵“ puddings”下。
  3. 並且可能是一個不可變的列表,其中包含每個食物實例的對象,這些對象既不是早餐也不是布丁,位於關鍵“其他”下。

暫無
暫無

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

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