[英]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(...)
在特定的數組字段(例如CODIGO
或TIPO
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.