【发布时间】:2019-11-19 06:20:32
【问题描述】:
我有以下代码。我需要根据我已经拥有的键值替换地图的值。
定义类有以下变量:
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);
【问题讨论】:
-
我认为 for 循环会比您的流更简单。另外,不要对潜在的空指针进行操作。
-
我相信你在这里使用的是非标准类。
Definition似乎不是 Java 8 的一部分。它可能是一个库。如果是这样,请告诉我们是哪一个,以便我们提供帮助。 -
DefinitionClass:公共类定义实现可序列化{ private Map
rows;私有字符串表名; public Map getRows() { return rows;} public void setRows(Map rows) { this.rows = rows;} public String getTableName() { return tableName; } public void setTableName(String tableName) { this.tableName = tableName; } @Override public String toString() { return "Definition{" + "rows=" + rows + ", tableName='" + tableName + '\'' + '}'; } } -
如果在您执行
replace时代码中的result1或result1.getRows为空怎么办?
标签: java list dictionary java-8