You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android API21下如何将List<Person>转为含PersonName的List<String>

低API 21下实现属性提取的解决方案

没问题,我来帮你搞定这个低API版本的需求!因为API 21不支持Java 8的Stream和Collector,咱们用最基础的循环就能实现,逻辑反而更清晰直接。下面分两个需求逐一说明:

1. 收集对象数组的属性列表

假设你有一个Person类型的数组,想要提取每个元素的PersonName属性到一个列表中,只需要创建一个空列表,然后遍历数组逐个提取即可:

// 先定义Person类(示例)
public class Person {
    private String personName;

    public Person(String personName) {
        this.personName = personName;
    }

    public String getPersonName() {
        return personName;
    }
}

// 提取数组属性的代码
Person[] personArray = {new Person("Alice"), new Person("Bob"), null, new Person("Charlie")};
List<String> nameList = new ArrayList<>();

for (Person person : personArray) {
    // *非常重要*:添加非空判断,避免空指针异常
    if (person != null) {
        nameList.add(person.getPersonName());
    }
}

2. 将List转换为包含PersonName的List

这个需求和数组的处理逻辑几乎一致,只是遍历的是List集合:

List<Person> personList = new ArrayList<>();
personList.add(new Person("David"));
personList.add(new Person("Eve"));
personList.add(null); // 模拟可能的空元素

List<String> nameList = new ArrayList<>();
for (Person person : personList) {
    if (person != null) {
        nameList.add(person.getPersonName());
    }
}

可选:封装通用工具方法(兼容API21)

如果你需要多次提取不同属性,可以封装一个通用方法。注意API21支持Java 8的Lambda(Android 5.0及以上支持),如果项目允许使用Lambda,写法会更简洁;如果不行,用匿名内部类替代即可:

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

// 通用属性提取工具方法
public class CollectionUtils {
    public static <T, R> List<R> extractProperty(List<T> sourceList, Function<T, R> propertyGetter) {
        List<R> resultList = new ArrayList<>();
        for (T item : sourceList) {
            if (item != null) {
                resultList.add(propertyGetter.apply(item));
            }
        }
        return resultList;
    }
}

// 使用方式1:Lambda表达式(API21支持)
List<String> names = CollectionUtils.extractProperty(personList, Person::getPersonName);

// 使用方式2:匿名内部类(兼容所有API21场景)
List<String> names = CollectionUtils.extractProperty(personList, new Function<Person, String>() {
    @Override
    public String apply(Person person) {
        return person.getPersonName();
    }
});

核心思路就是用传统的循环遍历集合/数组,逐个提取目标属性并添加到新集合中,非空判断一定要记得加,避免运行时的空指针异常。

内容的提问来源于stack exchange,提问作者Vahid H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:37:30