У меня есть код, как показано ниже
public void getList(List l){
List newList=new ArrayList();
l.forEach(x -> {
Object o = new Object[]{x.getId()};
newList.add(o);
});
sendList(newList);
}
В основном я читаю из списка, затем повторяю список и создаю список массива объектов, а затем отправляю новый список другому методу.
Вышеупомянутый метод работает нормально, но этот код выглядит уродливо для меня, поскольку я создаю новый список, затем повторяю его, используя цикл foreach, а затем назначаю его новому массиву объектов.
Может ли кто-нибудь предложить лучший способ?
@NikolasCharalambidis Я только что привел пример. В моем реальном коде я использую дженерики, и спасибо за редактирование моего поста.
Если вы хотите получить помощь по реальному коду, вы должны предоставить настоящий код. В противном случае все подсказки и ответы, которые вы получите, сузят дженерики, а не то, о чем вы действительно просите.
@NikolasCharalambidis спасибо за ваши предложения, обязательно опубликую реальные коды в будущем.
У вас было две синтаксические ошибки в коде (я исправил их, чтобы не закрывать вопрос из-за опечаток).
Не используйте необработанные типы.
Метода 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 в геттере, что бы он ни делал?
Если в случае, если мне нужно создать 2 списка объектов, то как будет выглядеть ваш метод карты. Я попробовал .map(x->{}Object o=new Object[]{x.getId()};Object o2=new Object[]{x.getName()}, тогда я получаю ошибку времени компиляции
Тип x должен иметь эти методы. Список, из которого вы получаете объекты, должен быть общим для этого типа.
Не используйте необработанные типы.