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

#java-8

#java-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, а затем присваиваю его новому массиву объектов.

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

Комментарии:

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

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

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

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

Ответ №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 средство получения, что бы оно ни делало?

Комментарии:

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

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