【问题标题】:performFiltering: List<>执行过滤:列表<>
【发布时间】:2018-02-19 07:57:35
【问题描述】:

我只想从 List 执行过滤器搜索,但我只有 ArrayList 源代码。使用 List 而不是 ArrayList 时如何转换?

下面是我的代码:

 @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();

        //CHECK CONSTRAINT VALIDITY
         if(constraint != null && constraint.length() > 0)
         {
             //CHANGE TO UPPER
             constraint = constraint.toString().toUpperCase();
             //STORE OUR FILTERED ORDER
             ArrayList<OrderModel> filteredOrder = new ArrayList<>();

             for (int i=0; i<filteredOrder.size(); i++) {
                 // CHECK
                 if (filterList.get(i).getCustomerName().toUpperCase().contains(constraint)) {
                     //ADD CUSTOMER TO FILTERED ORDERS
                    filteredOrder.add(filterList.get(i));
                    Log.d("Testing.....","You are here --->" + filteredOrder);
                 }
             }
             results.count = filteredOrder.size();
             results.values = filteredOrder;
         } else {
             results.count = filterList.size();
             results.values = filterList;
         }
        return results;
    }

【问题讨论】:

  • 您是否尝试将ArrayList&lt;OrderModel&gt; 替换为List&lt;OrderModel&gt;
  • 使用ListArrayList 并不重要
  • 什么是filterList?你真正面临什么问题?
  • 您确定吗,您将ArrayList 替换为java.util.List 而不是java.awt.List
  • 我不明白你的确切问题是什么。 ArrayList 是 Java 已经提供给您的接口 List 的实现,您无需在那里实现任何东西。此外,filteredOrder 实例化后没有元素,您的循环永远不会执行,因为它的大小为 0,并且 0 不大于 0。

标签: java android list arraylist


【解决方案1】:

如果你替换你的代码应该没问题

ArrayList<OrderModel> filteredOrder = new ArrayList<>();

List<OrderModel> filteredOrder = new ArrayList<>();

但要小心,在导入时你必须有

import java.util.List;

虽然您只使用了add()size(),但它必须有效。

【讨论】:

    【解决方案2】:

    由于我们正在向 java 10 迈进,请尝试 Stream api -

            List<String> list = Arrays.asList("abc","xyz","acd");
            List<String> filteredList = list.stream().filter((element) ->
            {
               return element.startsWith("a");
            }).collect(Collectors.toList());
            System.out.println(filteredList);
    

    您可以在此处插入自己的谓词。

    【讨论】:

      【解决方案3】:

      正如 RubioRic 所说,我的循环永远不会执行,因为它的大小为 0,并且 0 不大于 0。他是对的。我没有注意到这个问题。竖起大拇指!另外,我也替换了这一行:

      List<OrderModel> filteredOrder = new ArrayList<>();
      

      【讨论】:

        猜你喜欢
        • 2016-04-03
        • 2019-12-19
        • 1970-01-01
        • 2022-09-30
        • 1970-01-01
        • 1970-01-01
        • 2020-05-04
        • 2023-03-23
        • 2013-09-29
        相关资源
        最近更新 更多