对于以下情况,我需要您在JAVA中的帮助(如果可能,请提供一些示例代码):
我有一个带有类对象的列表,并想要检查一个对象属性是否有重复,然后保留其中一个并添加其他金额与保留的金额。例如:
我有这个班:
class Salary {
String names;
Double amount;
}
并且列表说salary_list
包含以下元素(例如):
[jony,john 300.96]
[fuse,norvi,newby 1000.55]
[john,jony 22.6]
[richard,ravi,navin 55.6]
[fuse,norvi,newby 200.6]
... ... ...
那么我的预期输出是相同的输入列表,其中包含以下修订结果:
[jony,john 323.56]
[fuse,norvi,newby 1201.15]
[richard,ravi,navin 55.6]
N.B :名称中的顺序并不重要,因此重复排除后的元素顺序不重要。
我不擅长英语和Java。如果有任何错误,请原谅我。
提前致谢。
答案 0 :(得分:1)
按如下方式增强Salary
课程:
class Salary {
String names;
Double amount;
private String sortedNames = null;
@Override
public boolean equals(Object o)
{
if (o == null || ! (o instanceof Salary)) return false;
Salary othr = (Salary) o;
String thisNames = this.getSortedNames();
String othrNames = othr.getSortedNames();
return thisNames.equals(othrNames);
}
@Override
public int hashCode()
{
return getSortedNames().hashCode();
}
public String getSortedNames()
{
if (this.sortedNames == null)
{
String[] nameArr = this.names.split(",");
Arrays.sort(nameArr);
StringBuilder buf = new StringBuilder();
for (String n : nameArr)
buf.append(",").append(n);
this.sortedNames = buf.substring(buf.length()==0?0:1);
}
return this.sortedNames;
}
}
这假定Salary
是不可变的(也就是说,在创建names
之后,amount
的值不会改变。然后您可以使用哈希映射来添加所有具有相同名称的金额。
Map<String,Salary> map = new HashMap<String,Salary>();
for (Salary s : list)
{
Salary e = map.get(s.getSortedNames());
if (e == null)
map.put(s.getSortedNames(), s);
else
e.amount += s.amount;
}
此时map
包含所有唯一Salary
个对象,每个对象的总金额。
答案 1 :(得分:0)
您在Java中几乎没有非常有用的工具。你可以
"jony,john".split(",")
之类的分隔符将为您提供数组{“jony”,“john”} Arrays.sort(arrayToSort)
Arrays.equals(array1, array2)
或使用Arrays.toString(array)
比较其字符串表示通过这些,您可以解决您的问题。
提示:您可以使用<String, Double>
之类的地图来计算数据。作为键(String),您可以使用名称的排序表示。如果Map已包含某些名称的已排序表示,则增加存储在该键下的值。