Как добавить в список из другого списка в 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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