【问题标题】:Android arraylist filter with hamcrest jar带有hamcrest jar的Android arraylist过滤器
【发布时间】:2016-03-14 13:25:32
【问题描述】:

我有一个 android 项目,它有一个自定义对象数组列表,现在我想过滤该数组列表。但我总是得到零(新数组列表的大小)。

public static <T> List<T> filter(Matcher<?> matcher, Iterable<T> iterable) {
    if (iterable == null)
        return new LinkedList<T>();
    else{
        List<T> collected = new LinkedList<T>();
        Iterator<T> iterator = iterable.iterator();
        if (iterator == null)
            return collected;
        while (iterator.hasNext()) {
            T item = iterator.next();
            if (matcher.matches(item))
                collected.add(item);
        }
        return collected;
    }
}

ArrayList<Products> sortedArrayList = (ArrayList<Products>) filter(Matchers.anyOf(
               Matchers.containsString(searchText),Matchers.containsString(searchText.toUpperCase())), productList);

为什么我得到零,请帮忙。

【问题讨论】:

    标签: android arraylist hamcrest


    【解决方案1】:

    过滤器方法中的语句matcher.matches(item) 总是返回false,因为你有字符串匹配器(Matchers.containsString)但是item 是Products 类型(假设productList 包含Products 类型的项目)。

    Matchers.containsString 返回一个继承 TypeSafeMatcher 形式的匹配器,并检查匹配的值是否具有兼容的类型。所以它需要一个String,但得到一个Products 对象。

    我看到两个选项:

    • 将matcher.matches(item) 更改为matcher.matches(item.getText()),其中getText 提取相关字符串以进行匹配(您必须调整泛型&lt;T&gt; -> &lt;T extends Products&gt;)。
    • 创建FeatureMatcher

      public class ProductsTextMatcher extends FeatureMatcher<Products, String> {
      
          public ProductsTextMatcher(Matcher<? super String> subMatcher) {
              super(subMatcher, "", "");
          }
      
          @Override
          protected String featureValueOf(Products actual) {
              return actual.getText();
          }
      
      }
      

      然后这样称呼它:

      filter(new ProductsTextMatcher(
              Matchers.anyOf(Matchers.containsString(searchText), Matchers.containsString(searchText.toUpperCase()))),
              productList); 
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多