Как выдавать элементы ArrayList?

У меня есть один ArrayList со многими элементами. Я хочу, чтобы он удалил из ´ArrayList´ элементы, которые не "дерево".

До настоящего времени я реализовал следующий код, который удаляет элементы, которые не деревья:

for(int i=0;i<elementosCreados.size();i++){
           if( elementosCreados.get(i).compareTo("arbol")!=0){
                elementosCreados.remove(i);
            }
}

Как он мог бы повторно размещать элементы ´ArrayList´ для того, чтобы не было пустых положений?

2
задан 01.04.2016, 00:58
4 ответа

Если ты используешь Java 8 или начальник, решение @CarlosMuñoz самое подходящее.

Для Java 7 или нижний, ты можешь реализовывать это используя Iterator:

System.out.println(elementosCreados);
Iterator<String> it = elementosCreados.iterator();
while (it.hasNext()) {
    String current = it.next();
    if (!current.equals("arbol")) {
        it.remove();
    }
}
System.out.println(elementosCreados);
3
ответ дан 24.11.2019, 14:40

PodrГ-схвати использовать .stream() и .filter() из Java 8:

elementosCreados = elementosCreados
    .stream()
    .filter(x -> !x.equals("arbol"))
    .collect(Collectors.toList());
2
ответ дан 24.11.2019, 14:40
  • 1
    Спасибо за отвечание так r и # 225; я прошу. Я попытался с opci и # 243; n, который ты показал мне, но меня не распознает м и # 233; каждый stream (), ни collect (). и #191; Из-за qu и # 233; смоги перемещать это? – adamista 31.03.2016, 21:57
  • 2
    Что versi и # 243; n Java ты используешь, streams, lambdas и collectors est и # 225; n доступные с versi и # 243; n 8?, Adem и # 225; s для класса Collectors ты должен делать java.util.stream.Collectors – Carlos Muñoz 31.03.2016, 21:59
  • 3
    Солитеры raz и # 243; n, он использовал versi и # 243; n java нижний, поэтому не я reconoc и # 237; в м и # 233; все. – adamista 31.03.2016, 22:55

Если ты хочешь использовать programaciГіn функционально в версиях, предыдущих Java 8, ты можешь использовать Guava из Google, эта librerГ - позволяет тебе иметь один cГіdigo как этот:

@Test
public void testArrayListFilter() {

  List<String> list=new ArrayList<String>(Arrays.asList("perro","gato","arbol","leon"));

  Iterables.removeIf(list, new Predicate<String>() {
    @Override
    public boolean apply(String element) {
      if(element.equals("arbol")) {
        return true;
      }
      return false;
    }
  }); 

  assertThat(list.contains("arbol"),is(false));
  assertThat(list.size(),is(3));
}
1
ответ дан 24.11.2019, 14:40

Другая с Google Guava:

List<String> list = Lists.newArrayList("arbol", "arbol", "casa", "auto");
List<String> filtrada = Lists.newArrayList(FluentIterable.from(list).filter(
        Predicates.not(Predicates.equalTo("arbol"))));

Стиль жидкого программирования позволяет нам сцеплять вместе призывы к методам, делая код читабельнее 1


Замечания

  1. Билл Беджек, Хеттинг Стартед with Google Guava, Паккт Публисинг, 2013, p. 40.
1
ответ дан 24.11.2019, 14:40