检查ArrayList <String>包含(“”)方法与equalsIgnoreCase
我有一个ArrayList();检查ArrayList <String>包含(“”)方法与equalsIgnoreCase
List<String> list = new ArrayList<>(); list.add("aaa");
list.add("BBB");
list.add("cCc");
System.out.println(list.contains("aAa"));
这里我想检查contains()方法与equalsIgnoreCase方法在同一行。 我该怎么做?
回答:
boolean containsEqualsIgnoreCase(Collection<String> c, String s) { for (String str : c) {
if (s.equalsIgnoreCase(str)) {
return true;
}
}
return false;
}
回答:
你不能。 contains
的合同是按照equals
。这是接口的基本组成部分。您必须编写一个自定义方法遍历列表并检查每个值。
回答:
从面向对象的角度来看,这是一个有趣的问题。
一种可能性是将您希望强制实施的合同责任(平等而无案例)转移到收集到的要素本身,而不是列表中,关于恰当分离的关注。
然后,您会为您的String对象添加一个新类(没有继承,String
类是final),您将实现自己的hashCode/equals约定。
// Strictly speaking, this is not a String without case, since only // hashCode/equals methods discard it. For instance, we would have
// a toString() method which returns the underlying String with the
// proper case.
public final class StringWithoutCase {
private final String underlying;
public StringWithoutCase(String underlying) {
if (null == underlying)
throw new IllegalArgumentException("Must provide a non null String");
this.underlying = underlying;
}
// implement here either delegation of responsibility from StringWithoutCase
// to String, or something like "getString()" otherwise.
public int hashCode() {
return underlying.toLowerCase().hashCode();
}
public boolean equals(Object other) {
if (! (other instanceof StringWithoutCase))
return false;
return underlying.equalsIgnoreCase(other.underlying);
}
}
填充收集的对象将是StringWithoutCase
实例:
Collection<StringWithoutCase> someCollection = ... someCollection.add(new StringWithoutCase("aaa"));
someCollection.add(new StringWithoutCase("BBB"));
someCollection.add(new StringWithoutCase("cCc"));
以上是 检查ArrayList <String>包含(“”)方法与equalsIgnoreCase 的全部内容, 来源链接: utcz.com/qa/265573.html