簡體   English   中英

在類數組中使用“包含”方法

[英]Using 'contains' method in a class array

我有這樣的課:

public static class TiposDeHistorial
{
    String CODIGO, TIPO;

    public TiposDeHistorial()
    {
    }

    public String getCODIGO()
    {
        return CODIGO;
    }

    public void setCODIGO(String CODIGO)
    {
        this.CODIGO = CODIGO;
    }

    public String getTIPO()
    {
        return TIPO;
    }

    public void setTIPO(String TIPO)
    {
        this.TIPO = TIPO;
    }
}

以及它的清單:

ArrayList<TiposDeHistorial> tiposHistorial;

所以我的問題是:我可以使用tiposHistorial.contains(...)在特定的數組字段(例如CODIGOTIPO tiposHistorial.contains(...)進行搜索嗎?

首先,您沒有array但是有ArrayList

List上的contains方法與它存儲的元素的equals方法一起工作(在您的情況下為TiposDeHistorial )。 因此,您的問題的答案是否定的。

由於類型不匹配,請嘗試使用諸如tiposHistorial.contains("a")之類的TiposDeHistorial在嘗試檢查String元素時,列表的類型為TiposDeHistorial

如果您使用的是Java 8,則可以使用以下代碼:

tiposHistorial.stream()
                .filter(x -> "specific value for CODIGO".equals(x.getCODIGO()))
                .findFirst()
                .orElse(null);

它將返回包含特定CODIGO值的列表中的TiposDeHistorial對象,否則返回null。

至於您的問題:“包含”方法僅返回“ true”或“ false”,而不是對象。 此外,它使用對象的“等於”方法,因此如果要使用字段進行搜索將無濟於事。

僅當您的對象等於ur列表元素對象時,contains方法才會返回true。 您可以嘗試擴展equals方法,並擁有自己的標准,該標准適用於CODIGO或TIPO。

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        test other = (test) obj;
        if (CODIGO == null) {
            if (other.CODIGO != null)
                return false;
        } else if (!CODIGO.equals(other.CODIGO))
            return false;
        return true;
    }

即使您不知道Java流,並且想要檢查列表是否同時包含一些CODIGO和TIPO字段,這里已經給出的答案都是正確的,對我而言,最簡單的解決方案是:

    ArrayList<TiposDeHistorial> tiposHistorial = new ArrayList<>();
    //add elements to the list
    String tipo = "TIPO"; // the TIPO value You are looking for in the list
    String codigo = "CODIGO"; // the CODIGO value You are looking for in the list
    boolean containsTipo = false;
    boolean containsCodigo = false;
    for (TiposDeHistorial element: tiposHistorial) {
        if (!containsTipo && element.getTIPO().equals(tipo)) {
            containsTipo = true;
        }
        if (!containsCodigo && element.getCODIGO().equals(codigo) ){
            containsCodigo = true;
        }
        if (containsTipo && containsCodigo)
            break;
    }

通過稍微編輯它,您可能還會發現數組的哪些元素包含您要查找的值(如果這是您的意圖)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM