gpt4 book ai didi

java - 在java8 Collectors.toMap中,keyMapper值应该来自另一个常量映射的键

转载 作者:行者123 更新时间:2023-11-30 02:09:25 29 4
gpt4 key购买 nike

我遇到这样的情况:

在我的项目中,我使用 spring boot 和 spring data。所以现在我必须在各个字段上过滤我的主要实体。字段及其值在调用后的请求正文中以 json 格式出现,如下所示。

{
"filters": [
{
"field": "ownerUiids",
"terms": "1,2"
},
{
"field": "key",
"terms": "a"
},
{
and many more
}
],
"sortBy": "wwww"
}

我有一个 pojo 类来将此 json 转换为 java。并且在该 pojo 类中包含来自 json 的字段列表。

我将此列表转换为字段映射及其值作为键和值,如下所示:

Map<String,String> filterMap =
request.getFilters().stream().collect(Collectors.toMap(Filter::getField,
Filter::getTerms));

所以我的问题从这里开始,json中的字段名称与数据库中的列名称不匹配,因此在创建条件api时,实际的列名称不会出现在查询中。

为了解决这个问题,我制作了常量静态映射,其中键作为 json 字段,值是与该字段对应的实际列名称,例如:

public static final Map<String, String> myMap = Collections.unmodifiableMap(
new HashMap<String, String>() {{
put("ownerUiids", "ownerUIID");
put("key", "keyValue");
}});

因此,当我制作 filterMap 时,我需要的键应该是常量 myMap 的值,即如果我可以执行 myMap.getKey(Filter::getField) ,而不是 Filter::getField 。但现在我无法这样做。

Map<String,String> filterMap =
request.getFilters().stream().collect(Collectors.toMap(myMap.getKey(Filter::getField),
Filter::getTerms));

在这件事之后,我有了列名称及其值的映射,这是我当前的要求。并解决我的问题。

请帮助我解决这个问题。或者如果您有比这更好的方法,那么这也是值得赞赏的。

最佳答案

你不能这样使用方法引用。试试这个:

Map<String,String> filterMap =
request.getFilters().stream()
.collect(Collectors.toMap(f -> myMap.get(f.getField()),
Filter::getTerms));

关于java - 在java8 Collectors.toMap中,keyMapper值应该来自另一个常量映射的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50545692/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com