java - 如何使用多成员变量条件过滤ArrayList?

标签 java

我想获取年龄大于32且地址为city2的DataObj对象。
怎么这样过滤呢?

以下是尝试过的代码。

package com.company;

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {

        ArrayList<DataObj> arr_datalist = new ArrayList<DataObj>();
        ArrayList<DataObj> arr_filteredlist;
        arr_datalist.add(new DataObj(1, "aka", 30, "city1"));
        arr_datalist.add(new DataObj(2, "akb", 31, "city2"));
        arr_datalist.add(new DataObj(3, "akc", 32, "city2"));
        arr_datalist.add(new DataObj(4, "akd", 33, "city1"));
        arr_datalist.add(new DataObj(5, "ake", 34, "city3"));

        // age greater than 32 and address is city2.
        arr_filteredlist = arr_datalist.filter(???);

    }
}

class DataObj {
    int i_id;
    String str_name;
    int i_age;
    String str_address;

    DataObj(int id, String name, int age, String address) {
        this.i_id = id;
        this.str_name = name;
        this.i_age = age;
        this.str_address = address;
    }
}

最佳答案

您有几个常见的选项:

自己动手:

List<DataObj> arr_filteredlist = new ArrayList<>();
for(DataObj e : arr_datalist) {
    if(e.i_age > 32 && e.str_address.equals("city2")) {
        arr_filteredlist.add(e);
    }
}

Guava :

Collection<DataObj> filteredColl = Collections2.filter(arr_datalist,
    new Predicate<DataObj>() {
        @Override
        boolean apply(DataObj e) {
            return e.i_age > 32 && e.str_address.equals("city2");
        }
        // + overrides equals
    });
List<DataObj> arr_filteredlist = new ArrayList<>(filteredColl);

Java 8:

List<DataObj> arr_filteredlist = 
    arr_datalist.stream()
                .filter(e-> e.i_age > 32 && e.str_address.equals("city2"))
                .collect(Collectors.toList());

关于java - 如何使用多成员变量条件过滤ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20375017/

相关文章:

java - 为什么java中1200/1080 = 1?

java - 如何在 java 中使用 sparkSubmit 更改 hdfs 中的用户

java - 在 UIMA Ruta Workbench 中添加 HeidelTime 作为分析引擎

java - 在 Spring Boot 中将属性放在 application.yml 或 bootstrap.yml 上有什么区别?

java - 在 JBoss Fuse Fabric 中注册 MBean (JMX) 的最简单方法?

java - J2ME如何拍照并存入内存?

java - jsoup 选择器如何工作?

java - Grails 3中CustomID的自动递增

java - 如何访问数组的通用数组列表中的元素

java - 扫描器仅适用于多个 Java 类中的一个