java - 有没有办法使用 java 8 替换 List 中的 Map 值?
问题描述
我有下面的代码。我需要根据我已经拥有的键值替换地图的值。
定义类具有以下变量:
private Map<String, String> rows;
private String tableName;
我试过下面的代码。这可以通过其他更简单的方式实现吗?
/*Definitions*/
Definition definitionObj = new Definition();
definitionObj.setTableName("TABLE1");
Map map = new HashMap<String,String>();
map.put("1","one");
map.put("2","two");
map.put("3","threee");
definitionObj.setRows(map);
Definition definitionObj1 = new Definition();
definitionObj1.setTableName("TABLE2");
Map map1 = new HashMap<String,String>();
map1.put("4","one");
map1.put("5","two");
map1.put("6","threee");
definitionObj1.setRows(map1);
String key1 = "2";
String value1 = "modifiedvalue"; /*the value that i need to set*/
List<Definition> myList = Arrays.asList(definitionObj,definitionObj1);
Definition result1 = myList.stream()
.filter(x -> "TABLE1".equals(x.getTableName()))
.findAny()
.orElse(null);
result1.getRows().replace(key1,value1);
System.out.println(result1);
解决方案
该findAny
方法返回一个可选项,您可以将其映射到字典,然后用于ifPresent
更新给定键的字典值。这是它的外观。
myList.stream().filter(x -> "TABLE1".equals(x.getTableName()))
.findAny().map(Definition::getRows)
.ifPresent(m -> m.put(key1, value1));
除此之外,您的Map
声明应更改为使用参数化类型而不是原始类型。改成这样
Map<String, String> map = new HashMap<>();
但是,更好的方法是在您的Definition
类中声明一个新的 API 方法来更新给定所需参数的内部状态,然后在您的客户端代码中使用它。这是它的外观。
public void updateRows(String key, String value) {
if (rows.containsKey(key))
rows.put(key, value);
}
myList.stream().filter(x -> "TABLE1".equals(x.getTableName())).findAny()
.ifPresent(d -> d.updateRows(key1, value1));
虽然前者违反了封装,但后者没有。
推荐阅读
- python - 用于查找 1000 位数字的 13 位连续数字的最大乘积的代码未提供所需的输出
- hibernate - Spring JPA 存储库为更新子句生成错误的本机查询
- c# - C# 我无法通过 gmails smtp 服务器发送消息。获取服务器无响应错误
- node.js - 跨子域共享 Express Session
- python - 为重复文件的输出添加大小
- dart - Dart 中这个冒号背后的原因是什么
- javascript - 如何遍历 javascript 对象中的所有子文档?
- java - 测试 1(代码强制)的运行时错误,但在 netbeans 中有效
- c# - 如何显示 Windows 窗体后面的内容?
- javascript - 两个运动物体的交集