所以我有一个水果ArrayList,它有水果的名称和它的主要维生素是什么:
ArrayList<Foods> fruit;
public Fruit() {
fruit = new ArrayList<Foods>();
fruit.add(new Foods("Orange", "Vitamin C"));
}
等。
我想将维生素C的所有水果添加到另一个数组列表中,所以我使用以下方法迭代它们:
Iterator vitC = fruit.iterator();
while (vitC.hasNext()) {
if (vitC.next().contains("Vitamin C")) {
vitCfruit.add(vitC.next());
}
}
然而,这会添加下一个值,因此如果apple在列表中位于橙色之后,它会将apple添加到下一个ArrayList而不是橙色。
答案 0 :(得分:1)
我会忽略代码中的明显错误。要使用列表中的元素,您应该执行以下操作:
Iterator vitC = fruit.iterator();
while (vitC.hasNext()) {
Foods x = vitC.next();
if (x.contains("Vitamin C")) { // should look for a Foods object here!!!
administrators.add(x);
}
}
答案 1 :(得分:0)
&#39;中的vitC.next()你声明会工作,但是当你把它添加到新列表时,你不会访问下一行中的相同元素。
使用tmp变量存储vitC.next(),如果它符合条件,你仍然可以添加ot ..
Iterator vitC = fruit.iterator();
while (vitC.hasNext()) {
tmp = vitC.next();
if (tmp.contains("Vitamin C")) { // should look for a Foods object here!!!
administrators.add(tmp);
}
}
答案 2 :(得分:0)
增强的for循环使这很简单:
<ComboBox x:Name="tab5_2_num" ItemsSource="{Binding}" FontSize="13" FontFamily="/WPF;component/Font/#Agency FB" Margin="722,46,406,281" BorderThickness="1,1,1,4" Height="30">
<ComboBox.ItemTemplate>
<DataTemplate>
<Label Content="{Binding}" />
</DataTemplate>
</ComboBox.ItemTemplate>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBoxItem}">
<Label x:Name="lblCombo" Foreground="Black" FontFamily="/WPF;component/Font/#Agency FB" FontSize="13" Height="20" />
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="lblCombo" Property="Background" Value="#FFF01F1F"/>
<Setter TargetName="lblCombo" Property="Foreground" Value="White" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
在Java 8中,使用lambdas很简单:
for (Fruit thisFruit : fruit) {
if (thisFruit.contains("Vitamin C")) {
vitCfruit.add(thisFruit);
}
}