我有下面的代码。我需要根据键值替换地图的值。
定义类具有以下变量:
private Maprows; private String tableName;
我试过下面的代码。可以用其他更简单的方法来实现吗?
/*Definitions*/ Definition definitionObj = new Definition(); definitionObj.setTableName("TABLE1"); Map map = new HashMap(); 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 (); 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 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);
Ravindra Ran.. 5
该findAny
方法返回一个可选参数,您可以将其映射到字典,然后用于ifPresent
更新给定键的字典值。这是它的外观。
myList.stream().filter(x -> "TABLE1".equals(x.getTableName())) .findAny().map(Definition::getRows) .ifPresent(m -> m.put(key1, value1));
除此之外,您的Map
声明应更改为使用参数化类型而不是原始类型。像这样改变它
Mapmap = 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));
尽管前者违反了封装,但后者没有违反封装。
该findAny
方法返回一个可选参数,您可以将其映射到字典,然后用于ifPresent
更新给定键的字典值。这是它的外观。
myList.stream().filter(x -> "TABLE1".equals(x.getTableName())) .findAny().map(Definition::getRows) .ifPresent(m -> m.put(key1, value1));
除此之外,您的Map
声明应更改为使用参数化类型而不是原始类型。像这样改变它
Mapmap = 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));
尽管前者违反了封装,但后者没有违反封装。