在Java中有一个Abstract类的List,需要循环遍历List

时间:2014-07-05 18:21:34

标签: java loops arraylist abstract extends

我正在尝试将我的代码从c#移到java,这是我第一次尝试编写java代码。

首先我注意到一个List<>在c#中不是作为java中的列表,我必须使用arrayList,所以我只是改变了

List<Instruments> instruments = new List<Instruments>();

List<Instruments> instruments = new ArrayList<Instruments>(); 

这解决了这个问题。

稍后在我的程序中,我有一个for循环,它通过List(抽象的“Instruments”类)运行,并比较所有子类具有的枚举(保存在.type中)。 I:E

public static int HowManyOfType(InstrumentType TP)
{
    int HowMany = 0;
    for (int i = 0; i < instruments.Size(); i++)
    {
        if (instruments[i].type == TP)
        HowMany++;
    }
    return HowMany;
}

但是我收到消息“预期的阵列类型”。 在c#中不会发生此问题,因为该属性存储在抽象类中,它只是进行比较而无需知道存储的子类的类型。 我猜它在java中并不那么简单。周围有这个吗? 感谢

3 个答案:

答案 0 :(得分:1)

更改此

 if (instruments[i].type == TP) 

 if (instruments.get(i).type == TP)

答案 1 :(得分:1)

将for循环更改为此。

for (Instruments eachInstrument : instruments) {
    if (eachInstrument.type == TP) {
        howMany++;
    }
}

虽然不知道eachInstrument.type的数据类型是什么,但我无法确定使用==是否正确。您可能需要将其更改为eachInstrument.type.equals(TP)

答案 2 :(得分:1)

如果您习惯使用C#,您可能会发现Java 8中的lambdas更自然。

long howMany = instruments.stream().filter(t -> t.type == TP).count();

除非类型是基元或枚举,否则您可能需要使用等于

long howMany = instruments.stream().filter(t -> t.type.equals(TP)).count();