java - 有没有办法使用 java 8 替换列表中的 Map 值?

标签 java list dictionary java-8

我有下面的代码。我需要根据我已有的键、值替换 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));

虽然前者违反了封装性,但后者却没有。

关于java - 有没有办法使用 java 8 替换列表中的 Map 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58927784/

相关文章:

java - 确定获得(纬度、经度)对的正确顺序以绘制 N 边的闭合正多边形的方法

python - 广播/迭代字典值的有效方法

c++ - SQLite C++ 按名称访问列

Java:如何将 String[] 转换为 List 或 Set

java - 具有最终类系统和静态方法 currentTimeMillis 的 PowerMock

c++ - 如何在没有随机性的情况下对列表进行洗牌,并保证一部分元素最终会出现在一侧?

Java:在没有lib的情况下实现简单列表

java - 尝试解析数据包: Is there a Java equivalent to Python's "unpack"?

java - 在 Java 中运行 Bash 命令

java - 仅使用 java 8 lambda 将 List<Object> 转换为 List<List<String>>