簡體   English   中英

在java8 Collectors.toMap中,keyMapper值應來自另一個常量映射的鍵

[英]In java8 Collectors.toMap, keyMapper value should come from another constant map's key

我有這樣的情況:

在我的項目中,我使用帶有spring數據的spring boot。所以現在我必須在各個領域過濾我的主要實體。 這樣,字段及其值將以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中的字段名稱與db中的列名稱不匹配,因此在創建條件api時,實際的列名稱不會出現在查詢中。

為了解決這個問題,我使用鍵作為json字段制作了常量靜態映射,並且值是對應於該字段的實際列名,例如:

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

因此,當我制作filterMap時,如果需要我可以做myMap.getKey(Filter :: getField),則密鑰應該是常量myMap的值,而不是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));

由於這個原因,創建dto類並格式化原始數據

1:創建dto並在dto類中寫入轉換器方法

List<Dto> dtos = request.getFilters().stream().map(Dto::convert).collect(Collectors.toList())

2:現在創建地圖

Map<String,String> filterMap = dtos.stream().collect(Collectors.toMap(Dto::getField,Dto::getTerms))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM