当前位置: 首页 > 知识库问答 >
问题:

使用stream修改地图

酆奇文
2023-03-14

我有一个映射,我正在遍历它,并使用for循环修改映射的值。我想知道是否有一种方法可以使用Java8流来实现。

这是我的代码:

Map<String,MyObject> myMap = getResultMap();
for (Map.Entry<String, MyObject> entry : myMap.entrySet()) {
    entry.getValue.setName(getName());
    entry.getValue.setId(getId());
    entry.getValue.setDept(getDept());
    entry.getValue.isValid(isValid();
    entry.getValue.setPipeLine(getPipeLine());
}

基本上,我想流化地图值,设置值,并将其作为新地图。

共有1个答案

荀正谊
2023-03-14

您可以通过流操作获得一个新的或一个新的映射,但不能改变数据(但您可以创建一个lambda,可以执行任何您想要的操作)。例如,使用您的代码示例:

Map<String, MyObject> myMap = getResultMap();
Map<String, MyObject> newMap = myMap.entrySet().stream()
            .collect(Collectors.toMap(Map.Entry::getKey, entry ->
            {
                entry.getValue().setName(getName());
                entry.getValue().setId(getId());
                entry.getValue().setDept(getDept());
                entry.getValue().setValid(isValid());
                entry.getValue().setPipeLine(getPipeLine());
                return entry.getValue();
            }
            ));

但是不要更新流中的共享可变变量!它会产生很多问题。

最好创建MyObject类的新实例,而不是修改myMap

Map<String, MyObject> newMap = myMap.entrySet().stream()
                .collect(Collectors.toMap(Map.Entry::getKey, entry ->
                        {
                            MyObject myObject = new MyObject();
                            myObject.setName(getName());
                            myObject.setId(getId());
                            myObject.setDept(getDept());
                            myObject.setValid(isValid();
                            myObject.setPipeLine(getPipeLine());
                            return myObject;
                        }
                ));
 类似资料:
  • 单击地图信息选项卡,可以查看当前地图的信息。单击地图名称旁边的 笔状图标,可以修改当前地图的信息。

  • 问题内容: 我有一个想要修改特定值的json,但是终端总是显示带有修改后值的json,但实际上并不会更改特定文件中的值。样本json: 我想更改文件本身中的address的值,但到目前为止,我一直无法更改。我尝试使用: 但这没用。有什么建议? 问题答案: AFAIK 不支持就地编辑,因此您必须先重定向到一个临时文件,然后再用它替换原始文件,或者使用moreutils包中的实用程序,如下所示: 还有

  • 我正在尝试修改以下项目,因为有一个我想做的自定义:https://github.com/swagger2markup/swagger2markup 反过来,我想在以下项目中使用修改后的二进制文件:https://github.com/swagger2markup/swagger2markup-gradle-project-template 总的来说,我认为我需要做以下几个步骤: null 然后我在

  • 问题内容: 我正在尝试读取HTML文件,并添加指向某些文本的链接: 例如:我想添加链接到“ Campaign0”文本。: 要添加的链接: 我需要一个Java程序来修改html,以在“ Campaign0 ” 上添加超链接。 我如何用Jsoup做到这一点? 我用JSoup尝试了这个: 这样对吗 ??它不起作用:( 简而言之 :是否有类似-> 在Java代码中使用JSoup或任何技术? 问题答案: 您

  • 问题内容: 我有这个元素: 我要做的就是在我的网页上进行更改。 可能吗? 问题答案: 试试这个:

  • 我试图阅读一个超文本标记语言文件,并添加一些文本的链接: 例如:我想添加“活动0”文本的链接: 要添加的链接: 我需要一个JAVA程序,修改html添加超链接超过“0”。 我如何使用Jsoup实现这一点? 我用JSoup试过这个: 这是正确的吗??它不起作用:( 简言之:有类似的吗-- 在JAVA代码中使用JSoup或任何技术??