Как добавить в список из другого списка в JDK 8

У меня есть код, как показано ниже

public void getList(List l){
    List newList=new ArrayList();
    l.forEach(x -> {
        Object o = new Object[]{x.getId()};
        newList.add(o);
    });
    sendList(newList);
}

В основном я читаю из списка, затем повторяю список и создаю список массива объектов, а затем отправляю новый список другому методу.

Вышеупомянутый метод работает нормально, но этот код выглядит уродливо для меня, поскольку я создаю новый список, затем повторяю его, используя цикл foreach, а затем назначаю его новому массиву объектов.

Может ли кто-нибудь предложить лучший способ?

Не используйте необработанные типы.

Nikolas Charalambidis 21.12.2020 10:12

@NikolasCharalambidis Я только что привел пример. В моем реальном коде я использую дженерики, и спасибо за редактирование моего поста.

HARAPRIYA NAYAK 21.12.2020 10:18

Если вы хотите получить помощь по реальному коду, вы должны предоставить настоящий код. В противном случае все подсказки и ответы, которые вы получите, сузят дженерики, а не то, о чем вы действительно просите.

Nikolas Charalambidis 21.12.2020 10:21

@NikolasCharalambidis спасибо за ваши предложения, обязательно опубликую реальные коды в будущем.

HARAPRIYA NAYAK 21.12.2020 10:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
4
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
  • У вас было две синтаксические ошибки в коде (я исправил их, чтобы не закрывать вопрос из-за опечаток).

  • Не используйте необработанные типы.

  • Метода Object#getId нет. По этой причине я предполагаю, что список, переданный методу, имеет общий тип объекта, у которого есть этот метод. Скажем:

    interface MyObject {
       Object getId();
    }
    

Теперь намерение и код кажутся ясными. У вас есть два основных способа добиться этого.

  1. Для каждого: это равно вашей попытке, однако вы должны использовать дженерики:

    public void getList(List<MyObject> l) {
        List<Object> newList=new ArrayList<>();
        l.forEach(x -> {
            Object o = new Object[] {x.getId()};
            newList.add(o);
       });
       sendList(newList);
    }
    
  2. Stream API: вы можете добиться того же результата, используя методы map и collect, собирая в список.

    public void getList(List<MyObject> l) {
        List<Object> newList = l.stream()
                                .map(x -> new Object[] {x.getId()})
                                .collect(Collectors.toList());
        sendList(newList);
    }
    

Примечание. Вы уверены, что хотите вызывать sendList в геттере, что бы он ни делал?

Если в случае, если мне нужно создать 2 списка объектов, то как будет выглядеть ваш метод карты. Я попробовал .map(x->{}Object o=new Object[]{x.getId()};Object o2=new Object[]{x.getName()}, тогда я получаю ошибку времени компиляции

HARAPRIYA NAYAK 21.12.2020 10:46

Тип x должен иметь эти методы. Список, из которого вы получаете объекты, должен быть общим для этого типа.

Nikolas Charalambidis 21.12.2020 11:02

Другие вопросы по теме