我的情况如下:
在我的项目中,我使用带弹簧数据的弹簧启动。所以现在我必须在各个领域过滤我的主要实体。在这样的帖子调用中,字段及其值在请求体中以json格式出现。
{
"filters": [
{
"field": "ownerUiids",
"terms": "1,2"
},
{
"field": "key",
"terms": "a"
},
{
and many more
}
],
"sortBy": "wwww"
}
我有一个pojo类将此json转换为java.and,该pojo类包含来自json的字段列表。
我将此列表转换为字段映射,其值为键和值,如:
Map<String,String> filterMap =
request.getFilters().stream().collect(Collectors.toMap(Filter::getField,
Filter::getTerms));
所以我的问题从这里开始,json中的字段名称与db中的列名不匹配,因此在制作条件api时,实际的列名不会出现在查询中。
为了解决这个问题,我使用key作为json字段创建了常量静态映射,value是与该字段对应的实际列名,如:
public static final Map<String, String> myMap = Collections.unmodifiableMap(
new HashMap<String, String>() {{
put("ownerUiids", "ownerUIID");
put("key", "keyValue");
}});
所以当我在制作filterMap时,我需要键是常量myMap的值,而不是Filter :: getField,如果我可以做myMap.getKey(Filter :: getField)。但是现在我无法做到这一点。
Map<String,String> filterMap =
request.getFilters().stream().collect(Collectors.toMap(myMap.getKey(Filter::getField),
Filter::getTerms));
在这件事之后,我有我的列名称及其值,这是我当前的需求。并解决了我的问题。
请帮我解决这个问题。或者如果你有比这更好的方法,那么这也是可观的。
答案 0 :(得分:2)
你不能像这样使用方法参考。试试这个:
Map<String,String> filterMap =
request.getFilters().stream()
.collect(Collectors.toMap(f -> myMap.get(f.getField()),
Filter::getTerms));
答案 1 :(得分:0)
因为创建dto类和格式化原始数据
1:在dto类中创建dto和write converter方法
Python 3.6.5
[GCC 4.3.4 [gcc-4_3-branch revision 152973]] on linux
Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):
File "/var/lib/spark/python/pyspark/shell.py", line 31, in <module>
from pyspark import SparkConf
File "/var/lib/spark/python/pyspark/__init__.py", line 110, in <module>
from pyspark.sql import SQLContext, HiveContext, Row
File "/var/lib/spark/python/pyspark/sql/__init__.py", line 45, in <module>
from pyspark.sql.types import Row
File "/var/lib/spark/python/pyspark/sql/types.py", line 27, in <module>
import ctypes
File "Python-3.6.5_suse/lib/python3.6/ctypes/__init__.py", line 7, in <module>
from _ctypes import Union, Structure, Array
ImportError: libffi.so.4: cannot open shared object file: No such file or directory
2:现在创建地图
List<Dto> dtos = request.getFilters().stream().map(Dto::convert).collect(Collectors.toList())