我有一个这样的数组列表,我想获取产品名称键“ Total”的值-Leisure 1,但不确定如何在Java spring boot中搜索或迭代对象的数组列表。 / p>
"priceList": [
{
"Total": "10",
"Stamp Duty": "10",
"Main Policy": "0",
"Product Name": "Leisure 1"
},
{
"Total": "10",
"Stamp Duty": "10",
"Main Policy": "0",
"Product Name": "Leisure 2"
},
{
"Total": "10",
"Stamp Duty": "10",
"Main Policy": "0",
"Product Name": "Leisure 3"
},
{
"Total": "10",
"Stamp Duty": "10",
"Main Policy": "0",
"Product Name": "Work 1"
},
{
"Total": "10",
"Stamp Duty": "10",
"Main Policy": "0",
"Product Name": "Work 2"
}
]
我尝试这样做。我创建了一个函数
public static <K, V> Stream<K> keys(Map<K, V> map, V value) {
return map
.entrySet()
.stream()
.filter(entry -> value.equals(entry.getValue()))
.map(Map.Entry::getKey);
}
然后我尝试将数组列表转换为地图,并尝试对列表进行筛选以找到确切的对象,但无济于事
priceList.stream().map(x -> x.get("Total").toString()).filter(s -> s.get("Product Name") == planHeader).collect(Collectors.toList());
我如何能够遍历或搜索对象数组并按特定值进行过滤?
任何帮助表示赞赏
答案 0 :(得分:1)
问题出在s.get("Product Name") == planHeader
您不应该将其与equals()进行比较吗?
答案 1 :(得分:1)
您可以使用equals
方法比较不是==
的字符串。
该方法检查字符串的实际内容,==
运算符检查对对象的引用是否相同。
priceList.stream()
.map(x -> x.get("Total").toString())
.filter(s -> s.get("Product Name").equals(planHeader)) // here
.collect(Collectors.toList());
答案 2 :(得分:0)
如果它是一个arrayList,则对其进行迭代,并对每个对象执行getter以获得总数。
for (Item i : priceList) {
system.out.println(i.getTotal());
}
答案 3 :(得分:0)
我从您的帖子中猜测,您使用的是这样的数据结构:
List<Map<String, String>> priceList
您确实应该为价格使用自定义类。如果要使用列表和地图,以下几行可能会有所帮助。
List<Map<String, String>> priceList = readPrices();
// stream the list
String total = priceList.stream()
// filter for the price's Product Name
.filter(price -> "Leisure 1".equals(price.get("Product Name")))
// find the first one
.findFirst()
// extract the Total from the found price
.map(price -> price.get("Total"))
// return null if no matching price found
.orElse(null);
可以使用字符串键访问地图。地图内部使用hashCode
和equals
。没什么可担心的。