当前位置:  开发笔记 > 编程语言 > 正文

有什么办法可以使用Java 8替换List中的Map值?

如何解决《有什么办法可以使用Java8替换List中的Map值?》经验,为你挑选了1个好方法。

我有下面的代码。我需要根据键值替换地图的值。

定义类具有以下变量:

private Map rows;
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声明应更改为使用参数化类型而不是原始类型。像这样改变它

Map 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));

尽管前者违反了封装,但后者没有违反封装。



1> Ravindra Ran..:

findAny方法返回一个可选参数,您可以将其映射到字典,然后用于ifPresent更新给定键的字典值。这是它的外观。

myList.stream().filter(x -> "TABLE1".equals(x.getTableName()))
    .findAny().map(Definition::getRows)
    .ifPresent(m -> m.put(key1, value1));

除此之外,您的Map声明应更改为使用参数化类型而不是原始类型。像这样改变它

Map 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));

尽管前者违反了封装,但后者没有违反封装。

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有