我正在开发Spring启动应用程序,有两个对象,一个是自定义类列表,另一个是字符串键和字符串值的映射。例如。
DTO object with fixed fields fieldA,fieldB,fieldc.
[{"fieldA": "lookupval1","fieldB": "val2","fieldc":"val3"},
{"fieldA": "lookupval1","fieldB": "val5","fieldc":"val6"}
{"fieldA": "lookupval2","fieldB": "val8","fieldc":"val9"}]
另外请注意,此字段A的前两个对象具有重复值
然后我有地图<code>地图
{
lookupval1= {fieldA:"lookupval1",fieldD:"xxx",.............},
lookupval2= {fieldA:"lookupval2",fieldD:"yyy",.............}.
.
.
.
}
我想要的是,我想将列表中的每一项的字段与map中的字段相结合,我可以通过获取fieldA的查找值在Map中找到相应的键。
字段a:查找值1
然后我想把响应发送给REST客户端,那么有效的方法和数据结构是什么呢?
预期结果:
[
{"fieldA": "lookupval1","fieldB": "val2","fieldc":"val3",fieldD:"xxx"},
{"fieldA": "lookupval1","fieldB": "val2","fieldc":"val3",fieldD:"xxx"}
{"fieldA": "lookupval2","fieldB": "val8","fieldc":"val9",fieldD:"yyy"}]
]
更新:
下面是DTO对象的结构和Map的确切类型。
class DTO {
int id;
String name;
String desc;
}
List<DTO> dtoList = getDTOList(); // returns list of DTO object
Map<String,Map<String,String> mapCollection
= getMapCollection(); // return String, Map<String,String> pairs
我已经发布了答案,我已经这样做了,但寻找更好的替代方案来减少计算。
假设
假设您的初始对象是项目
类型,如下所述。
class Item {
String fieldA,fieldB,fieldC;
// Getters / Setter
}
假设< code>Item的初始列表称为< code>items
假设您的初始映射称为 map
,并且类型为 Map
解决办法
向Item类添加方法以返回<code>Map
public Map<String, String> toMap() {
return new HashMap<String, String>() {{
put("fieldA", fieldA);
put("fieldB", fieldB);
put("fieldC", fieldC);
}};
}
创建一个方法来获取给定字段
的字段
D
值 A 值
private String getFieldDValueForFieldAValue(String fieldAValue) {
return map.get(fieldAValue).get("fieldD");
}
创建将正确的
fieldD
值添加到项映射的方法
private Map<String, String> addFieldD(Map<String, String> itemMap) {
itemMap.put("fieldD", getFieldDValueForFieldAValue(itemMap.get("fieldA")));
return itemMap;
}
然后您可以使用正确的
field dD
值为每个对象生成映射列表
List<Map<String, String>> list = items.stream()
.map(Item::toMap) // Converts all Items to Maps
.map(m -> addFieldD(m)) // Adds the correct fieldD value to each Map
.collect(Collectors.toList()); // make it a List
最后用它制作一个JSON字符串:
Type listType = new TypeToken<List<Map<String, String>>>() {}.getType();
Gson gson = new Gson();
String json = gson.toJson(list, listType);
System.out.println(json);
这将输出以下JSON:
[
{"fieldA":"lookupval1","fieldC":"val3","fieldB":"val2","fieldD":"xxx"},
{"fieldA":"lookupval1","fieldC":"val6","fieldB":"val5","fieldD":"xxx"},
{"fieldA":"lookupval2","fieldC":"val9","fieldB":"val8","fieldD":"yyy"}
]
List<DTO> dtoList = getDTOList(); // returns list of DTO object
Map<String,Map<String,String> mapCollection
= getMapCollection(); // return String, Map<String,String> pairs
List<Map<String,String>> result = new HashMap<>();
// iterate over dto list
for(DTO singleDTO : dtoList) {
Map<String,String> singleResult = new HashMap<>();
// Add all fields in map
singleResult.put("id",singleDTO.getId());
singleResult.put("name",singleDTO.getName());
singleResult.put("desc",singleDTO.getDesc());
// fetch single map by id lookup
Map<String,Strig> singleMap = mapCollection.get(singleDTO.getId());
// fetch all entries from map
Set<Map.Entry<String,String>> entrySet = singleMap.entrySet();
// add them in hashmap
for(Map.Entry<String,String> singleEntry : entrySet) {
singleResult.put(singleEntry.getKey(),singleEntry.getValue());
Add map in the list
result.add(singleEntry);
}}
//result
[
{
"id":"1", "name":"abc", "desc":"some desc abc", "ID":"1", "mapField1":"field1 value", "mapField2":"field1 value"
},
{
"id":"1", "name":"xyz", "desc":"some desc xyz", "ID":"1", "mapField1":"field1 value", "mapField2":"field1 value"
},
{
"id":"2", "name":"pqr", "desc":"some desc pqr", "ID":"2", "mapField1":"field1 value 2", "mapField2":"field1 value2"
}
]
问题内容: 我需要能够在运行时合并两个(非常简单的)JavaScript对象。例如,我想: 有没有人为此提供脚本或知道内置的方式来执行此操作?我不需要递归,也不需要合并函数,只需合并平面对象上的方法即可。 问题答案: ECMAScript 2018标准方法 您将使用对象传播: 现在是和的并集。中的属性将覆盖中的属性。 这也是此语法的MDN文档。如果您正在使用babel,则需要babel-plugi
我想要一个方法,它返回一个Object,该Object被赋予一个类,该类取决于传递的String的值 然后,我希望能够打印出一个属性(例如对象属性),我知道它将由类名可以表示的所有可能的类持有。可能的类在单独的文件中定义。但是编译器给错误找不到符号对象属性。我如何访问这个对象的属性? 抱歉,问题措辞不当 感谢您的任何帮助
比方上面的类型,如果我想要 value 的类型在type为 'string' 时为 string ,在 type 为 'number' 的时候为 number。 要怎么定义这两个属性之间的类型约束?
到目前为止,我已经学会了: 1) 对于循环,我可以使用它来迭代对象中的索引,例如具有数字索引键的数组。 2) 的中,循环为我提供了iterable和custom属性以及继承属性。但是,它忽略了值未定义的属性。 对于例如。 将省略索引,因为它的值是。 但是,它将迭代,和。 3) 的对值而不是键进行迭代。不同之处在于,它只迭代所有iterable属性,忽略了自定义属性,也忽略了从原型链继承的属性。但是
问题内容: 我有两个或多个JavaScript对象。我想合并它们,添加共同属性的值,然后按值的降序对其进行排序。 例如 然后应该是这样的: 即,两个对象都合并,添加共同键的值,然后对键进行排序。 这是我尝试过的: 但我认为它没有好处。如此多的循环:(如果有人可以提供更少混乱且良好的代码,那就太好了。 问题答案: 无法对对象的属性进行排序,但是可以对数组进行排序:
我正在尝试使用DynamoDB JavaScript shell创建一个简单的表,我得到了这个异常: 下面是我试图创建的表: 但是,如果我将第二个属性添加到KeySchema,它就可以正常工作。a工作台下方: 我不想将范围添加到密钥架构。知道怎么修吗?