如何在Java中的DB4O上使用distinct数据库?

如何在Java中的DB4O上使用distinct数据库?,java,db4o,Java,Db4o,谁能告诉我如何在Java代码中对db4o使用Distinct操作。我在Java中找不到任何示例 谢谢 好的,没有内置的独立操作符。你需要使用一种变通方法。例如,您可以使用一个集合来执行不同的操作: 由于对象的相等而不同。当您的类具有适当的equals()和hashCode()实现时,这将非常有用: ObjectSet<TestClass> result = container.query(TestClass.class); // will use the equals-method

谁能告诉我如何在Java代码中对db4o使用Distinct操作。我在Java中找不到任何示例


谢谢

好的,没有内置的独立操作符。你需要使用一种变通方法。例如,您可以使用一个集合来执行不同的操作:

由于对象的相等而不同。当您的类具有适当的equals()和hashCode()实现时,这将非常有用:

ObjectSet<TestClass> result = container.query(TestClass.class);
// will use the equals-method of TestClass.
Set<TestClass> distinctResult = new HashSet<TestClass>(result);
ObjectSet result=container.query(TestClass.class);
//将使用TestClass的equals方法。
Set distinctResult=新哈希集(结果);
被某一领域区分开来。当您希望通过某个字段将其区分开来时,此选项非常有用

ObjectSet<TestClass> result = container.query(TestClass.class);
Set<TestClass> distinctResultByField = new TreeSet<TestClass>(new Comparator<TestClass>() {
    public int compare(TestClass o1, TestClass o2) {
       return o1.getTestField().compareTo(o2.getTestField());
    }
});
distinctResultByField.addAll(result);
ObjectSet result=container.query(TestClass.class);
Set distinctResultByField=新树集(新比较器(){
公共int比较(TestClass o1、TestClass o2){
返回o1.getTestField().compareTo(o2.getTestField());
}
});
distinctResultByField.addAll(结果);

好的,没有内置的独立操作符。你需要使用一种变通方法。例如,您可以使用一个集合来执行不同的操作:

由于对象的相等而不同。当您的类具有适当的equals()和hashCode()实现时,这将非常有用:

ObjectSet<TestClass> result = container.query(TestClass.class);
// will use the equals-method of TestClass.
Set<TestClass> distinctResult = new HashSet<TestClass>(result);
ObjectSet result=container.query(TestClass.class);
//将使用TestClass的equals方法。
Set distinctResult=新哈希集(结果);
被某一领域区分开来。当您希望通过某个字段将其区分开来时,此选项非常有用

ObjectSet<TestClass> result = container.query(TestClass.class);
Set<TestClass> distinctResultByField = new TreeSet<TestClass>(new Comparator<TestClass>() {
    public int compare(TestClass o1, TestClass o2) {
       return o1.getTestField().compareTo(o2.getTestField());
    }
});
distinctResultByField.addAll(result);
ObjectSet result=container.query(TestClass.class);
Set distinctResultByField=新树集(新比较器(){
公共int比较(TestClass o1、TestClass o2){
返回o1.getTestField().compareTo(o2.getTestField());
}
});
distinctResultByField.addAll(结果);

我想要一个
从。。。订购人。。。不同的
查询。我是这样做的:

public static List<Country> getAllCountries(final CountryOrder order)
{
   ObjectContainer oc = DbHelper.getInstance().getContainer();
   ObjectSet<Country> countries = oc.query(new Predicate<Country>()
   {
      HashSet<Country> distinctCountries = new HashSet<Country>();

      @Override
      public boolean match(Country et)
      { // Need this to make a distict query... sad
         if (distinctCountries.contains(et))
         {
            return false;
         }

         distinctCountries.add(et);
         return true;
      }
   }, new Comparator<Country>()
   {
      @Override
      public int compare(Country o1, Country o2)
      {
         switch (order)
         {
            case COUNTRY_CODE:
               return o1.getCountryCode().compareTo(o2.getCountryCode());
            case COUNTRY_NAME:
               return o1.getCountryName().compareTo(o2.getCountryName());
            default:
               return o1.compareTo(o2);
         }
      }
   });

   return countries;
}
公共静态列表getAllCountries(最终国家顺序)
{
ObjectContainer oc=DbHelper.getInstance().getContainer();
ObjectSet countries=oc.query(新谓词()
{
HashSet distinctCountries=新HashSet();
@凌驾
公共布尔匹配(国家/地区et)
{//需要这个来做一个distict查询…悲哀
if(distinctccountries.contains(et))
{
返回false;
}
添加(et);
返回true;
}
},新的比较器()
{
@凌驾
公共整数比较(国家o1,国家o2)
{
开关(命令)
{
案例国家代码:
返回o1.getCountryCode().compareTo(o2.getCountryCode());
案例国家/地区名称:
返回o1.getCountryName().compareTo(o2.getCountryName());
违约:
返回o1。与(o2)相比;
}
}
});
返回国;
}

回想起来,对于
distinctccountries
,您可以使用任何容器而不是
HashSet

我想要一个
从。。。订购人。。。不同的
查询。我是这样做的:

public static List<Country> getAllCountries(final CountryOrder order)
{
   ObjectContainer oc = DbHelper.getInstance().getContainer();
   ObjectSet<Country> countries = oc.query(new Predicate<Country>()
   {
      HashSet<Country> distinctCountries = new HashSet<Country>();

      @Override
      public boolean match(Country et)
      { // Need this to make a distict query... sad
         if (distinctCountries.contains(et))
         {
            return false;
         }

         distinctCountries.add(et);
         return true;
      }
   }, new Comparator<Country>()
   {
      @Override
      public int compare(Country o1, Country o2)
      {
         switch (order)
         {
            case COUNTRY_CODE:
               return o1.getCountryCode().compareTo(o2.getCountryCode());
            case COUNTRY_NAME:
               return o1.getCountryName().compareTo(o2.getCountryName());
            default:
               return o1.compareTo(o2);
         }
      }
   });

   return countries;
}
公共静态列表getAllCountries(最终国家顺序)
{
ObjectContainer oc=DbHelper.getInstance().getContainer();
ObjectSet countries=oc.query(新谓词()
{
HashSet distinctCountries=新HashSet();
@凌驾
公共布尔匹配(国家/地区et)
{//需要这个来做一个distict查询…悲哀
if(distinctccountries.contains(et))
{
返回false;
}
添加(et);
返回true;
}
},新的比较器()
{
@凌驾
公共整数比较(国家o1,国家o2)
{
开关(命令)
{
案例国家代码:
返回o1.getCountryCode().compareTo(o2.getCountryCode());
案例国家/地区名称:
返回o1.getCountryName().compareTo(o2.getCountryName());
违约:
返回o1。与(o2)相比;
}
}
});
返回国;
}
回想起来,对于
distinctccountries
,您可以使用任何容器而不是
HashSet