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

如何从ArrayList中获取指定元素?附自定义Parcelable类型Coin类代码

如何从ArrayList中获取指定元素并补全Parcelable实现的Coin类?

嘿,我来帮你搞定这两个问题,这都是Android开发里常用的操作,咱们一步步来:

一、从ArrayList中获取指定元素的三种常用方法

1. 通过索引直接获取

如果已经知道目标元素在ArrayList中的位置(索引从0开始),直接用get(int index)方法就可以拿到,不过要注意别越界,否则会抛出IndexOutOfBoundsException异常。举个例子:

// 先初始化并填充你的Coin列表
ArrayList<Coin> coinList = new ArrayList<>();
coinList.add(new Coin("Bitcoin", "$30000", "+2.5%"));
coinList.add(new Coin("Ethereum", "$1800", "-1.2%"));

// 获取索引为1的元素(也就是第二个元素Ethereum)
Coin targetCoin = coinList.get(1);

2. 遍历列表查找匹配元素

如果不知道索引,想根据Coin的属性(比如name)来查找,就可以用增强for循环遍历列表,匹配到目标元素就返回:

// 根据名称查找Coin的方法
private Coin findCoinByName(String targetName, ArrayList<Coin> coinList) {
    for (Coin coin : coinList) {
        // 这里要注意空指针,最好先判断coin.getName()不为null再比较
        if (targetName != null && targetName.equals(coin.getName())) {
            return coin;
        }
    }
    // 没找到匹配的元素就返回null
    return null;
}

3. Java 8+ Stream方式(更简洁)

如果你的项目用了Java 8及以上,用Stream API来查找会更优雅,还能避免空指针问题:

// 查找名称为Bitcoin的Coin
Optional<Coin> optionalCoin = coinList.stream()
        .filter(coin -> "Bitcoin".equals(coin.getName()))
        .findFirst();

// 如果存在就获取元素,否则返回null
Coin targetCoin = optionalCoin.orElse(null);

二、补全你的Coin类的Parcelable实现

你提供的Coin类已经有了Parcelable的雏形,我帮你补全剩下的代码,并且加上必要的说明:

package com.example.vartotojas.heycrypto;
import android.os.Parcel;
import android.os.Parcelable;

public class Coin implements Parcelable{
    private String name;
    private String price;
    private String change;

    // 常规构造方法,用于创建Coin对象
    public Coin(String name, String price, String change) {
        this.name = name;
        this.price = price;
        this.change = change;
    }

    // 从Parcel中读取数据的构造方法,顺序要和writeToParcel一致
    protected Coin(Parcel in) {
        name = in.readString();
        price = in.readString(); // 补全你没写完的price读取
        change = in.readString();
    }

    // Parcelable要求的方法,一般返回0即可(只有当包含特殊对象时才需要修改)
    @Override
    public int describeContents() {
        return 0;
    }

    // 将对象数据写入Parcel,顺序必须和读取时完全对应
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(price);
        dest.writeString(change);
    }

    // 必须的CREATOR常量,系统用它来反序列化Parcel为Coin对象
    public static final Creator<Coin> CREATOR = new Creator<Coin>() {
        @Override
        public Coin createFromParcel(Parcel in) {
            return new Coin(in);
        }

        @Override
        public Coin[] newArray(int size) {
            return new Coin[size];
        }
    };

    // 添加getter方法,方便外部访问私有属性(查找、展示数据都需要)
    public String getName() {
        return name;
    }

    public String getPrice() {
        return price;
    }

    public String getChange() {
        return change;
    }
}

几个关键注意点:

  • 读写顺序必须一致:writeToParcel里写入的顺序,要和Coin(Parcel in)里读取的顺序完全相同,不然会导致属性值错乱;
  • CREATOR必须实现:这是Parcelable接口强制要求的,没有它系统无法完成对象的反序列化;
  • 添加getter方法:因为你的属性是private的,外部要访问的话必须通过getter,不管是查找元素还是展示数据都离不开它。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:29:32