HaniAgel Ответов: 1

Копирование определенного элемента из arraylist в другой arraylist в java


попытка скопировать один элемент(объект) с определенным значением из ArrayList объектов в другой ArrayList
например:
Как я могу скопировать объект, который имеет идентификатор 1, от автомобилей до bestcars класса ArrayList
Car c1 = new Car("Toyota",1);
Car c2 = new Car("Mercedes",2);

ArrayList<Car>cars = new ArrayList<>();
ArrayList<Car>bestCars = new ArrayList<>();
cars.add(c1);
cars.add(c2);


Что я уже пробовал:

import java.util.ArrayList;
public class Car {

    public String name;
    public int id;

    public Car(String name, int id) {
        this.name = name;
        this.id = id;
    }


    public static void main(String[] args) {

        Car c1 = new Car("Toyota",1);
        Car c2 = new Car("Mercedes",2);

        ArrayList<Car>cars = new ArrayList<>();

        cars.add(c1);
        cars.add(c2);

        ArrayList<Car>bestCars = new ArrayList<>();
        Car p = cars.get(1);
        bestCars.add(p);

        System.out.println("------ Cars -------");
        for(Car test: cars){
            if(test instanceof Car)
            {   System.out.println("---------------------------------------");

                System.out.println("\t\tCar Name:" + test.name +
                        "\nCar ID:"+
                        test.id  );}
        }
        System.out.println("------ bestCars -------");
        for(Car test: cars){
            if(test instanceof Car)
            {   System.out.println("---------------------------------------");

                System.out.println("Car Name:" + test.name +
                        "\nCar ID:"+
                        test.id  );}
        }



    }

}

Richard MacCutchan

В чем же вопрос?

HaniAgel

извините , вопрос обновлен

1 Ответов

Рейтинг:
10

Thomas Daniels

Вы можете сделать это:

Car c1 = new Car("Toyota",1);
Car c2 = new Car("Mercedes",2);

ArrayList<Car>cars = new ArrayList<>();
ArrayList<Car>bestCars = new ArrayList<>();
cars.add(c1);
cars.add(c2);
            
Car c = cars.stream()
            .filter(x -> x.id == 1)
            .findFirst()
            .get();
bestCars.add(c);
System.out.println(bestCars.get(0).name); // Toyota

Как это работает:

  • cars.stream() создает а Stream из ArrayList На этом объекте имеется filter функция, которую вы можете использовать.
  • .filter(x -> x.id == 1) возьму все Carчто 1 как id (в этом примере есть одна такая машина). x -> x.id == 1 это лямбда-выражение (это функция, которая может быть создана с помощью простого оператора, подобного этому, без необходимости принадлежать к классу). Выражение имеет один параметр x и возвращается x.id == 1, тип Boolean.
  • .findFirst() возвращает Опционально<автомобиль>[^] - - Optional это контейнер, который может содержать или не содержать ненулевой объект. Необязательный параметр будет пустым, если filter оказалось, что он отфильтровывает все объекты и не возвращает ни одного (но в данном примере это не так).
  • .get() извлекает из себя Car из Optional Обратите внимание, что если в опциональном поле нет значения, то это вызовет NoSuchElementException В этом примере ясно, что существует соответствующее значение. В приложениях, где вы не уверены на 100% в том, что опционально иметь значение, используйте isPresent.


HaniAgel

сработало большое спасибо, вы просто кладезь информации :)

Maciej Los

Хороший ответ ;)