#java #lambda
Вопрос:
Если я хочу добавить все значения списка или даже массива, я мог бы использовать:
List<MyObject> newList = ...
myObjects.stream().forEach(x -> newList.add(x));
Однако что, если вместо того, чтобы делать это со всем объектом, я хочу вместо этого действовать с переменными-членами объектов, где эти значения также являются списками?
Если бы я не использовал лямбды, я бы написал такой код, как:
List<String> var1list = ...
List<String> var2list = ...
for (MyObject myObject : myObjects) {
var1List.addAll(myObject.getVar1Values());
var2List.addAll(myObject.getVar2Values());
}
Пожалуйста, дайте мне несколько советов о том, как правильно писать такого рода выражения (даже если лучшим решением является не использовать лямбды), а также почему это правильный подход.
Комментарии:
1.
myObjects.stream().forEach(x -> {var1list.addAll(x.getVar1Values()); var2list.addAll(x.getVar2Values()); });
?2. @GreenCloakGuy вам не нужно использовать
.stream()
это решение.3. Что не так с вашим текущим решением? Мне кажется, это довольно прямолинейно.
Ответ №1:
Я думаю, что вы пытаетесь перебрать мой объект и пытаетесь сделать над ним какую-то логику.
это должно быть похоже.
List<String> var1list = new ArrayList<String>();
List<String> var2list = new ArrayList<String>();
List<MyObject> myObjects = Arrays.asList(new MyObject("1", "2"), new MyObject("3", "4"));
myObjects.forEach((obj)->{
var1list.add(obj.getVar1());
var2list.add(obj.getVar2());
});
Комментарии:
1. Я предлагаю вам сопоставить имена методов операций и т. Д.
Ответ №2:
ты это имеешь в виду?
myObjects.stream()
.map((it) -> it.getVar1Values())
.forEach((it) ->{
var1List.addAll(it);
var2List.addAll(it);
})
Комментарии:
1. Для этого вам не нужно передавать список в потоковом режиме.
2. @WJS почему плохой способ использовать поток? Я слышал, и именно поэтому я спрашиваю об этом
3. Я никогда не говорил, что это плохо. Я сказал, что тебе не нужно им пользоваться.
myObjects
это список, и он поддерживаетforEach
напрямую. Так что вы можете сделатьmyObjects.forEach(it-> {var1List.addAll(it.getVar1Values()); var2List.addAll(it.getVar2Values());};