为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Java 8 Streams 将列表中的对象与地图中的数据与条件进行匹配并保存到另一个地图

如何使用 Java 8 Streams 将列表中的对象与地图中的数据与条件进行匹配并保存到另一个地图

SMILET 2023-08-16 17:41:17
寻找解决方案,如果对象字段以地图值开头并保存到另一个地图,如何将列表中的对象与地图中的数据与条件进行匹配我有带有一些数据的地图Map<String, String> dataMap = new HashMap()    dataMap.put("d1", "DATA1")    dataMap.put("d2", "DATA2")    dataMap.put("d3", "DATA3")和 DataElement 对象的列表    List<DataElement> elements = new ArrayList()elements.add(new DataElement("TEXT1"))elements.add(new DataElement("TEXT2"))elements.add(new DataElement("DATA1_text1"))elements.add(new DataElement("DATA2_text2"))class DataElement {            public field;        public DataElement(String text){            this.field = text        }        public getField(){            return this.field        }    }我正在尝试获取新的 Map,其中键是第一个映射中的值,值是列表中的对象(字段),条件是如果对象字段以映射值开头:结果应该是:[d1=DATA1_text1, d2=DATA2_text2]  我的代码:    Map<String, String> collect2 = dataMap.entrySet().stream()            .filter({ map -> elements.stream()                                .anyMatch({ el -> el.getField().startsWith(map.getValue()) })})            .collect(Collectors.toMap(KEY, VALUE))
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

希望我的问题是正确的:


Map<String, String> collect2 = 

    dataMap.entrySet()

          .stream()

          .map(e -> elements.stream()

                            // this will search for the first element of the List matching

                            // the value of the current Entry, if exists

                            .filter(el -> el.getField().startsWith(e.getValue()))

                            .findFirst()

                            // this will create a new Entry having the original key and the

                            // value obtained from the List

                            .map(el -> new SimpleEntry<>(e.getKey(),el.getField()))

                            // if findFirst found nothing, map to a null element

                            .orElse(null))

          .filter(Objects::nonNull) // filter out all the nulls

          .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

您正在处理 input 的条目Map,并仅保留具有与 的元素匹配的值的条目List(通过filter(),尽管有一些语法错误),但您需要将map输入条目转换为包含所需新值的新条目。


上面的代码产生Map


{d1=DATA1_text1, d2=DATA2_text2}

对于给定的输入。


查看完整回答
反对 回复 2023-08-16
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信