Я знаю, что по причинам concurrency я не могу обновить значение локальной переменной в лямбда в Java 8. Так что это незаконно:
double d = 0;
orders.forEach( (o) -> {
d+= o.getTotal();
});
Но как насчет обновления переменной экземпляра или изменения состояния локального объекта? Например, приложение Swing имеет кнопку и метку, объявленную как переменные экземпляра, когда я нажимаю кнопку Я хочу скрыть метку
jButton1.addActionListener(( e) -> {
jLabel.setVisible(false);
});
Я не получаю ошибок компилятора и отлично работает, но... правильно ли изменить состояние объекта в лямбда?, У меня будут проблемы с concurrency или что-то плохое в будущем?
Вот еще один пример. Представьте, что следующий код находится в методе doGet сервлета Будет ли у меня какая-то проблема здесь?, Если ответ да: почему?
String key = request.getParameter("key");
Map<String, String> resultMap = new HashMap<>();
Map<String, String> map = new HashMap<>();
//Load map
map.forEach((k, v) -> {
if (k.equals(key)) {
resultMap.put(k, v);
}
});
response.getWriter().print(resultMap);
Что я хочу знать: когда правильно мутировать состояние экземпляра объекта в лямбда?