#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(); }
Теперь намерение и код кажутся ясными. У вас есть в основном два способа добиться этого.
- Для каждого: это равно вашей попытке, однако вы должны использовать дженерики:
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); }
- 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
должен иметь эти методы. Список, из которого вы получаете объекты, должен быть универсальным для этого типа.