gpt4 book ai didi

java - 将几乎相同的对象分类到列表中

转载 作者:行者123 更新时间:2023-11-29 03:02:24 25 4
gpt4 key购买 nike

如果我有一个名为 Dog 的对象,它看起来类似于:

public class Dog {
String type;
String furColor;
String country;
String name;
}

我还有一个像这样的对象:

public class SimilarDogs {
ArrayList<Dog> similarDogList;
}

现在我希望所有具有相同typefurColorcountry 的狗都在同一个similarDogList ArrayList ,但是一只狗只能在一个similarDogList中。我怎样才能做到这一点?

我考虑过通过 Dog ArrayList 进行双重迭代

  1. 取 first..second..third[..] Dog 入数组

  2. 创建一个新的相似狗列表

  3. 再次遍历狗列表

  4. 将所有相似的狗添加到列表中。

问题是,它会为整个列表中的每只狗创建一个 similarDogList,但我想要一个通用的 similarDogList 中没有重复的狗。


编辑:我确实解决了这样的问题。

public static ArrayList<SimilarDogs> buildDogGroups(ArrayList<Dog> dogs){
ArrayList<SimilarDogs> similarDogGroups = new ArrayList<SimilarDogs>();

//Generate a KeyList
ArrayList<String> uniqueKeys = new ArrayList<>();

for(Dog dataRecord : dogs){
if(!uniqueKeys.contains(dataRecord.getType() + dataRecord.getFurColor() + dataRecord.getCountry())){
uniqueKeys.add(dataRecord.getType() + dataRecord.getFurColor() + dataRecord.getCountry());
}
}

//Generate SimilarDogGroups
for(String uniKey : uniqueKeys){
SimilarDogs smlDog = new SimilarDogs();
ArrayList<Dog> similarDogRecords = new ArrayList<Dog>();
for(DataRecord dataRecord : dogs){
if(uniKey.equals(dataRecord.getType() + dataRecord.getFurColor() + dataRecord.getCountry())){
similarDogRecords.add(dataRecord);

}
}
smlDog.setSameJobGroup(similarDogRecords);
similarDogGroups.add(smlDog);
}

return similarDogGroups;
}

最佳答案

使用包含 Map 列表的多图( ListDog s) s 代表狗的每个“类别”。您需要为每一类相似的狗分配一个“代表”:

解决方案一

  • 创建类 DogCategory具有定义它的所有属性(即 typefurColorcountry )
    • 这个需要覆盖 equals()hashCode() ,如果所有属性都相等,则使实例相等
  • 创建一个分配 DogCategory 的方法每个 Dog
    • 这可能是 Dog 的一个方法: public DogCateogry getCategory() { ... }
  • 创建 Map<DogCategory, List<Dog>>将狗存放在各自的类别中
  • 对于每只狗,获取他的 DogCategory , 在 map 上查询适当的列表并将狗添加到列表中

解决方案2

  • 创建 Comparator<Dog>返回 0当且仅当给定两个 Dog s 具有相等的相关属性(即 typefurColorcountry)(name 可以是任何东西)
  • 使用包含 Comparator 的 map 因为它是排序/平等定义
    • TreeMap就是这样一个 map 实现,所以你可以使用
      TreeMap<Dog, List<Dog>>
  • 对于每只狗,在 map 上查询适当的列表并将狗添加到列表中

解决方案3

  • 创建 DogCategory如解决方案 1
  • 重构您的 DogDogCategory dogCategoryString name不包括所有属性
  • 创建 Map<DogCategory, List<Dog>>并在解决方案 1 中使用它

- 这可能是也可能不是适当的重构,您需要根据您的实际情况和领域模型来决定。

关于java - 将几乎相同的对象分类到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34021016/

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