2013-03-12 5 views
-2

Мне нужно скопировать определенные элементы из массива в новый массив. Например: Множество фруктов включает в себя яблоки и апельсины, я хочу получить только яблоки из него в новый массив под названием «Яблоки».Копирование особых элементов массива

Спасибо.

+7

и что вы пробовали? – SudoRahul

+0

Создайте список, выполните итерацию массива, добавьте яблоки в список, вызовите List.toArray(). – Kai

ответ

1

Я бы предложил использовать ArrayList. С помощью ArrayList вы можете динамически добавлять к нему элементы.

for (int i = 0; i < fruits.size(); i++) 
{ 
    if (fruits.get(i) instanceof apple) 
    apples.add(fruits.get(i)); 
} 

И если вам по-прежнему нужен массив яблок. Apple[] arrayOfApples = apples.ToArray();

+1

Почему не 'for (Fruit fruit: fruits)'? – Kai

+1

Не раздражать вас, но фрукты будут пустыми: P и да использовать foreach это безопаснее, а на Java мы обычно кладем фигурные скобки за цикл for –

+0

Это тоже работает. – 2013-03-12 16:05:27

2

Вы можете воспользоваться оператором instanceof, чтобы узнать, есть ли фрукты в Apple. После этого просто выполните итерацию по массиву, добавив выбранные элементы в другой массив.

2

Все в коде псевдо:

первое, что вы можете сделать:

Fruit[] oArray = ....; 
int noOfApple = 0; 

for each Fruit f in oArray { 
    if (f is apple) { 
    noOfApple++; 
    } 
} 

Fruit[] newArray = new Fruit[noOfApple]; 

int index = 0; 
for each Fruit f in oArray { 
    if (f is apple) { 
    newArray[index++] = f; 
    } 
} 

хорошо, потому что вы явно создать новый массив, так что вы должны узнать размер, прежде чем вы можете на самом деле создайте новый массив. Для того, чтобы сделать его проще, вы можете сделать что-то вроде

List<Fruit> newFruits = new ArrayList<Fruit>(); 
for each Fruit f in oArray { 
    if (f is apple) { 
    newFruits.add(f); 
    } 
} 
Fruit[] newArray = newFruits.toArray(); 

Я думаю, что намеки должны быть уже более чем достаточно

Если вы хотите сделать что-то еще круче, попробуйте использовать Guava. Вы можете сделать что-то вроде (большая часть кода действительна, с небольшим кодом psuedo):

Fruit[] result = 
    Iterables.filter(Array.asList(oArray), 
        new Predicate<Fruit>(){ 
        @Override 
        boolean apply(Fruit f) { return (f is apple);} 
        }) 
      .toArray(); 
Смежные вопросы