Мне нужно изменить список на междунар как это следующим образом:Java 8: изменить конкретный элемент в потоке с помощью лямбда-выражения
- Каждый элемент == 10 потребности быть удвоены
Здесь моя попытка:
list.stream()
.filter(val -> val.getValue() == 10)
.map(val -> {
val.doubleValue();
return val;
})
.forEach(System.out::println);
проблема в том, что я фильтрации элементов, в то время как я хотел бы, чтобы держать их всех и просто изменить те, == 0.
EDIT: список состоит из элементов MyType
, определяется как это следующим образом:
public class MyType {
private int val;
public MyType(int v){
this.val = v;
}
public void doubleVal(){
val*val;
}
public int getValue(){
return val;
}
}
Любое предложение?
Переместить условие в функцию карты и только увеличивать его, если оно выполнено? Возвращайте неизмененные значения во всех остальных случаях. – Henrik
Вы квадратизируете val - не удваиваете его .... – DaveH
'val.doubleValue()' не удваивает значение val, оно возвращает значение 'val' как' double' (т. Е. 10 становится 10.0). – Eran