我有一个对象列表“Artical”,它有2个属性articalid和articalVersion 如下图所示。
enter public class Artical{
public int articalid;
public double articalVersion;
//with getter and setters
}
现在有列表有以下结果
articalid=1098 articalVersion=1.0
articalid=1098 articalVersion=1.1
articalid=1078 articalVersion=1.0
articalid=1078 articalVersion=1.1
articalid=1065 articalVersion=1.0
articalid=1043 articalVersion=1.0
现在我想制作仅包含版本号较大的对象的列表(和articalid不得重复),如
articalid=1098 articalVersion=1.1
articalid=1078 articalVersion=1.1
articalid=1065 articalVersion=1.0
articalid=1043 articalVersion=1.0
答案 0 :(得分:2)
首先对列表进行排序
Collections.sort(articleList, new ArticalComparatorSort());
使用以下比较器:
class ArticalComparatorSort implements Comparator<Artical>
{
@Override
public int compare(Artical a1, Artical a2)
{
if(a1.getArticalid() < a2.getArticalid()){
return -1;
}
else if(a1.getArticalid() > a2.getArticalid()){
return 1;
}
else{ // When both id are equals
return Double.compare(a2.getArticalVersion(), a1.getArticalVersion());
}
}
}
这将排序为:
[1043 : 1.0
, 1065 : 1.0
, 1078 : 1.1
, 1078 : 1.0
, 1098 : 1.1
, 1098 : 1.0
然后使用TreeSet
删除重复项
Set<Artical> mySet = new TreeSet<Artical>(new ArticalComparatorSet());
对于TreeSet
,请使用以下comperator:
class ArticalComparatorSet implements Comparator<Artical>
{
@Override
public int compare(Artical a1, Artical a2)
{
if(a1.getArticalid() < a2.getArticalid()){
return -1;
}
else if(a1.getArticalid() > a2.getArticalid()){
return 1;
}
else{
return 0;
}
}
}
这将删除重复项:
[1043 : 1.0
, 1065 : 1.0
, 1078 : 1.1
, 1098 : 1.1
因此,您只需要添加这三行代码来删除重复项:
Collections.sort(articleList, new ArticalComparatorSort());
Set<Artical> mySet = new TreeSet<Artical>(new ArticalComparatorSet());
mySet.addAll(articleList);
并且只实现上述比较器
答案 1 :(得分:0)
在迭代中这样做
Map<Integer,Artical> outPuts = new HashMap<Integer,Artical>();
for(Artical artical1 : articals ){
for(Artical artical2 : articals ){
if(artical1.getarticalid() == artical2.getarticalid()){
int retval = Double.compare(artical1.getarticalVersion(), artical2.getarticalVersion());
if(retval > 0) {
if(outPuts.containsKey(artical1.getarticalid())){
outPuts.remove(artical1.getarticalid());
outPuts.add(artical1.getarticalid(),artical1);
}else{
outPuts.add(artical1.getarticalid(),artical1);
}
}
else{
if(outPuts.containsKey(artical1.getarticalid())){
outPuts.remove(artical1.getarticalid());
outPuts.add(artical1.getarticalid(),artical1);
}else{
outPuts.add(artical1.getarticalid(),artical1);
}
}
}
}
}