【问题标题】:How to make a condition for multiple list that will show only the array with the same value如何为仅显示具有相同值的数组的多个列表创建条件
【发布时间】:2019-08-19 09:57:40
【问题描述】:

我想在我的多个数组中创建一个条件以获取仅包含“已交付”的数组列表。有人可以帮我解决这个问题吗?

我已经尝试过 "myOrderItemModelList.contains("Delivered")" 但我总是得到空白结果。

    List<MyOrderItemModel> myOrderItemModelList = new ArrayList<>();

    myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 2, "Tide Detergent", "149.50", "Ren's Grocery", "Juan Dela cruz", "Order_Received", 4, 3));
    myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 2, "Tide Detergent", "149.75", "Ren's Grocery", "Juan Dela cruz", "On_Process", 0, 5));
    myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 3, "Tide Detergent", "50", "Ren's Grocery", "Juan Dela cruz", "Order_Processed", 1, 0));
    myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 1, "Tide Detergent", "70", "Ren's Grocery", "Juan Dela cruz", "On_Delivery", 1, 1));
    myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 5, "Tide Detergent", "30", "Ren's Grocery", "Juan Dela cruz", "Delivered", 3, 2));
    myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 6, "Tide Detergent", "56", "Ren's Grocery", "Juan Dela cruz", "Delivered", 2, 4));
    myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 1, "Tide Detergent", "75", "Ren's Grocery", "Juan Dela cruz", "Cancelled", 5, 2));

    if (myOrderItemModelList.contains("Delivered")) {
        MyOrderItemOnProcessAdapter myOrderItemOnProcessAdapter = new MyOrderItemOnProcessAdapter(myOrderItemModelList);
        my_orders_recyclerview.setAdapter(myOrderItemOnProcessAdapter);
        myOrderItemOnProcessAdapter.notifyDataSetChanged();
    }

【问题讨论】:

  • 在 MyOrderItemModel 模型类中生成 equals 方法,它将解决您的问题。
  • 似乎 MyOrderItemModel 是一个 java bean 对象?如果是这样,Jaymin 是对的,你应该在你的 bean 中实现一个 equals 方法。

标签: java android list android-studio arraylist


【解决方案1】:

myOrderItemModelList.contains("Delivered") 不会给您想要的,因为您的列表包含 MyOrderItemModel 实例,而不是字符串。

如果您正在寻找仅包含状态为“已交付”的项目的过滤列表,假设 MyOrderItemModel 上有一个 status() 方法:

List<MyOrderItemModel> delivered = myOrderItemModelList.stream().filter( 
  item -> "Delivered".equals(item.status())).collect(Collectors.toList());

或者,如果您想对整个列表执行某些操作,但前提是至少有一项处于“已交付”状态:

if (myOrderItemModelList.stream().anyMatch(item -> "Delivered".equals(item.status()))) {
      MyOrderItemOnProcessAdapter myOrderItemOnProcessAdapter = new 
      MyOrderItemOnProcessAdapter(myOrderItemModelList);
      my_orders_recyclerview.setAdapter(myOrderItemOnProcessAdapter);
      myOrderItemOnProcessAdapter.notifyDataSetChanged();           
}

【讨论】:

    【解决方案2】:

    您必须首先检查列表中的订单状态,即“已交付”项目,然后将列表设置为适配器。

    您可以通过以下方式进行操作

       List<MyOrderItemModel> filteredList = new ArrayList<>();
        for (int i = 0; i < myOrderItemModelList.size(); i++) {
            MyOrderItemModel myOrderItemModel = myOrderItemModelList.get(i);
            if (myOrderItemModel.getStatus().equalsIgnoreCase("Delivered")) {
                filteredList.add(myOrderItemModel);
            }
    
        }
    

    现在将filteredList 添加到适配器。

    注意:将 getStatus() 替换为您的 MyOrderItemModel 类的状态获取器

    希望这行得通!

    【讨论】:

      【解决方案3】:
      List<MyOrderItemModel> myDeliveredItemModelList = new ArrayList<>();
      for(int i=0;i<myOrderItemModelList.size();i++){
          MyOrderItemModel myOrderItemModel=myOrderItemModelList.get(i);
          if(myOrderItemModel.getStatus().equals(“Delivered”){
              myDeliveredItemModelList.add(myOrderItemModel);
          }
      
      }
      

      从上面的代码你会得到新的 ArrayList myDeliveredItemModelList 包含“delivered”。

      注意 :myOrderItemModel.getStatus() —>getStatus 替换为你的变量

      你的最终代码在这里:

       List<MyOrderItemModel> myOrderItemModelList = new ArrayList<>();
          myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 2, "Tide Detergent", "149.50", "Ren's Grocery", "Juan Dela cruz", "Order_Received", 4, 3));
          myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 2, "Tide Detergent", "149.75", "Ren's Grocery", "Juan Dela cruz", "On_Process", 0, 5));
          myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 3, "Tide Detergent", "50", "Ren's Grocery", "Juan Dela cruz", "Order_Processed", 1, 0));
          myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 1, "Tide Detergent", "70", "Ren's Grocery", "Juan Dela cruz", "On_Delivery", 1, 1));
          myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 5, "Tide Detergent", "30", "Ren's Grocery", "Juan Dela cruz", "Delivered", 3, 2));
          myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 6, "Tide Detergent", "56", "Ren's Grocery", "Juan Dela cruz", "Delivered", 2, 4));
          myOrderItemModelList.add(new MyOrderItemModel(R.drawable.tide_prod, 1, "Tide Detergent", "75", "Ren's Grocery", "Juan Dela cruz", "Cancelled", 5, 2));
      
      
      
      List<MyOrderItemModel> myDeliveredItemModelList = new ArrayList<>();
      for(int i=0;i<myOrderItemModelList.size();i++){
          MyOrderItemModel myOrderItemModel=myOrderItemModelList.get(i);
          if(myOrderItemModel.getStatus().equals(“Delivered”){
              myDeliveredItemModelList.add(myOrderItemModel);
          }
      
      }
      
        MyOrderItemOnProcessAdapter myOrderItemOnProcessAdapter = new MyOrderItemOnProcessAdapter(myDeliveredItemModelList);
           my_orders_recyclerview.setAdapter(myOrderItemOnProcessAdapter);
           myOrderItemOnProcessAdapter.notifyDataSetChanged();
      

      【讨论】:

        【解决方案4】:

        list 的 contains 方法通过查看对象的 equals 方法来检查是否存在完全相同的对象。 所以 if(myOrderItemModelList.contains(myOrderItemModel)) 是处理代码的正确方法。 在 myOrderItemModel 中,您可以重写 equals 方法并编写类似

        的内容

        public boolean equals(Object obj) { if(obj instanceof MyOrderItemModel) { MyOrderItemModel m = (MyOrderItemModel)obj; return m.delivered.equals(this.delivered); } return false; }

        更合适的方法是迭代列表并检查交付状态。

        public boolean isDelivered(List<MyOrderItemModel > myOrderItemModelList) {
        for(MyOrderItemModel m : myOrderItemModelList) { if(m.getDelivery.equals("delivered")) { return true; } } return false; }

        在 java 8 中,您可以使用类似的东西。

        myOrderItemModelList.stream().filter(m -&gt; m.getDelivered.equals('Delivered')).count() &gt; 0;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-12
          • 1970-01-01
          • 2015-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多