作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 SearchListPojo 类型的动态 Arraylist sList,它具有区域、位置和数量属性。可以有 n 个具有相似面积和位置的项目。我想检索并添加具有相似区域和位置的项目的相应数量。
我的搜索列表Pojo:
public class SearchListPojo
{
String area, location, quantity;
public String getQuantity() {
return quantity;
}
public void setQuantity(String quantity) {
this.quantity = quantity;
}
public String getLocation() {
return location;
}
public int compareTo(SearchList o2) {
// TODO Auto-generated method stub
return 1;
}
public void setLocation(String location) {
this.location = location;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
@Override
public boolean equals(Object o) {
if (o == null || !(o instanceof SearchList))
return false;
return ((SearchList) o).area.equals(this.area)
&& ((SearchList) o).location.equals(this.location);
}
@Override
public String toString() {
return "SearchList [area=" + area + ", location=" + location + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((area == null) ? 0 : area.hashCode());
result = prime * result
+ ((location == null) ? 0 : location.hashCode());
return result;
}
}
假设有 5 项:
[area=Area1, location=Location1, quantity=3],
[area=Area1, location=Location1, quantity=7],
[area=Area3, location=Location2, quantity=2],
[area=Area3, location=Location2, quantity=22],
[area=Area3, location=Location1, quantity=10]
添加类似商品的数量后,列表应为:
[area=Area1, location=Location1, quantity=10],
[area=Area3, location=Location2, quantity=24],
[area=Area3, location=Location1, quantity=10]
如何比较列表 sList 的每一行并添加相似项目的数量?
最佳答案
我会尝试按照以下方式进行操作。我使用 Map
,其键实际上是区域和位置的组合。对于每个独特的区域/位置对,我都会保留数量的总和,最后我将这些信息打印到控制台。
Map<String, Integer> countMap = new HashMap<String, Integer>();
for (SearchListPojo slp : sList) {
String key = slp.getArea() + "-" + slp.getLocation();
int quantity = Integer.parseInt(slp.getQuantity());
int total = countMap.get(key) != null ? countMap.get(key) : 0;
total += quantity;
countMap.put(key, total);
}
// this for loop iterates over the Map and prints out the quantities
// for similar items
for (Map.Entry<String, Integer> entry : countMap.entrySet()) {
String areaName = entry.getKey().split("-")[0];
String locationName = entry.getKey().split("-")[1];
Integer quantity = entry.getValue();
System.out.print("area=" + areaName + ", ");
System.out.print("location=" + locationName + ", ");
System.out.print("quantity=" + quantity);
}
顺便说一句,您正在执行的操作与 SQL 可以处理的 GROUP BY
操作非常相似。话虽这么说,如果您的 SearchListPojo
对象最终来自数据层,那么您最好在那里完成这项繁重的工作。
关于java - 如何为相似的行添加 Arraylist 项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33383661/
我是一名优秀的程序员,十分优秀!