gpt4 book ai didi

java - 按存在于另一个数组列表中的 ListView 排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:12:10 25 4
gpt4 key购买 nike

在我正在创建的 android 程序中,每个用户都会有一个 arraylist 首选项,我使用的代码只会使问题变得不必要地复杂,但是假设我有一个要在 ListView 中显示的宠物列表。每个页面都会有完整的宠物列表,比如说

ArrayList<Pet> allPetsList = {"dogs", "cats", "parrots", "mice", "hamsters", "guinea pigs"}

用户会想看到所有的宠物信息,但会想先看到他们拥有的宠物种类,所以还有另一个数组列表,pets I have,说有 ArrayList<Pet> myPets {"cats", "mice"} .我如何对所有宠物的列表进行排序,以便它首先显示猫和老鼠,然后显示其余的?

我打算用

allPetsList.sort(myPetsList, new Comparator<Item>() {
public int compare(Item left, Item right) {
if (myPetsList.contains(left)) {
return 1;
}
else {
return 0;}
}
});`

但 ArrayList.sort 函数似乎已被弃用,我不确定这是否仍然有效。如何做呢?我认为这无关紧要,但 Pet 对象包含名称字符串和两个整数,因此变量必须是 .getName() .提前致谢!

最佳答案

首先从第二个列表中删除第一个列表的所有元素,然后创建一个 LinkedList(保持顺序)将其余元素组合在一起:

List<Pets> resultList = new LinkedList<>();
List<Pets> firstList = {"cats", "mice"};
List<Pets> secondList = {"dogs", "cats", "parrots", "mice", "hamsters", "guinea pigs"};

secondList.removeAll(firstList);//{"dogs", "parrots", "hamsters", "guinea pigs"}

resultList.addAll(firstList);//{"cats", "mice"}
resultList.addAll(secondList);//{"cats", "mice", "dogs", "parrots", "hamsters", "guinea pigs"}

编辑

根据您的评论,您可以按照以下步骤解决您的问题:

  • 在您的类对象中使用 hashCode()equals(..) 方法,如下所示:

...

@Override
public int hashCode() {
int hash = 3;
hash = 53 * hash + Objects.hashCode(this.name);
return hash;
}

@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Pet other = (Pet) obj;
if (!Objects.equals(this.name, other.name)) {
return false;
}
return true;
}

...

  • 然后从主列表中找到所有元素
  • 删除它们
  • 然后将它们添加到顶部

这是一种使用 Java 8 的方法:

List<Pet> namesList = new LinkedList<>(
Arrays.asList(
new Pet("cats", 0, 0),
new Pet("mice", 0, 0)
)
);

List<Pet> petsList = new LinkedList<>(
Arrays.asList(
new Pet("dogs", 16, 18),
new Pet("cats", 36, 99),
new Pet("parrots", 85, 25),
new Pet("mice", 70, 28),
new Pet("hamsters", 12, 41),
new Pet("guinea pigs", 75, 95)
)
);

List<Pet> newList = petsList.stream()
.filter(t -> namesList.contains(t))
.collect(Collectors.toList());//find the necessary objects

petsList.removeAll(newList);//remove them from the principal list
petsList.addAll(0, newList);//add the result on the top

Check the demo code

关于java - 按存在于另一个数组列表中的 ListView 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46871205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com