检查ArrayList是否包含某个字符串,同时不区分大小写

时间:2016-10-12 06:39:46

标签: java arraylist

如何在不区分大小写的情况下使用.contains方法搜索ArrayList?我尝试过.containsIgnoreCase,但发现IgnoreCase方法仅适用于字符串。

这是我想要创建的方法:

 private ArrayList<String> Ord = new ArrayList<String>(); 

 public void leggTilOrd(String ord){
     if (!Ord.contains(ord)){
         Ord.add(ord);
     }
 }

4 个答案:

答案 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
}