[英]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.