如何在不区分大小写的情况下使用.contains方法搜索ArrayList?我尝试过.containsIgnoreCase,但发现IgnoreCase方法仅适用于字符串。
这是我想要创建的方法:
private ArrayList<String> Ord = new ArrayList<String>();
public void leggTilOrd(String ord){
if (!Ord.contains(ord)){
Ord.add(ord);
}
}
答案 0 :(得分:3)
如果您使用的是Java7,只需覆盖contains()方法
即可public class CastInsensitiveList extends ArrayList<String> {
@Override
public boolean contains(Object obj) {
String object = (String)obj;
for (String string : this) {
if (object.equalsIgnoreCase(string)) {
return true;
}
}
return false;
}
}
如果您使用的是Java 8.0,则使用流API,
List<String> arrayList = new ArrayList<>();
arrayList.stream().anyMatch(string::equalsIgnoreCase);
答案 1 :(得分:2)
您需要遍历列表并检查每个元素。这就是contains
方法中发生的情况。由于您要对要检查的String元素使用equalsIgnoreCase
方法而不是equals
方法,因此需要明确地执行此操作。这可以是for-each循环,也可以是Stream(下面的示例是使用Stream)。
private final List<String> list = new ArrayList<>();
public void addIfNotPresent(String str) {
if (list.stream().noneMatch(s -> s.equalsIgnoreCase(str))) {
list.add(str);
}
}
答案 2 :(得分:1)
List#Ccontains()
方法检查列表中是否存在参数,但列表元素中未进行任何更改
使用流来代替
public void leggTilOrd(String ordParameter) {
final List<String> ord = Arrays.asList(new String[]{ "a", "A", "b" });
final boolean ordExists = ord.stream().anyMatch(t -> t.equalsIgnoreCase(ordParameter));
System.out.println(ordExists);
}
答案 3 :(得分:0)
如果您想避免重复,请使用HashSet
代替List。哈希在搜索时工作得更快。在底层类中,使用String.toUpperCase()
覆盖equals和hashcode方法以返回预期结果。如果您有一个String列表,则可以创建一个字符串包装类。
String Wrapper可能如下所示: -
public class CaseInsensitiveString {
String string;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((string == null) ? 0 : string.toUpperCase().hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CaseInsensitiveString other = (CaseInsensitiveString) obj;
if (string == null) {
if (other.string != null)
return false;
} else if (!string.toUpperCase().equals(other.string.toUpperCase()))
return false;
return true;
}
// Other Methods to access string
}