Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>In my original answer, I unthinkingly suggested using a <code>Comparator</code>, but this causes the <code>TreeSet</code> to violate the <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Object.html#equals(java.lang.Object)" rel="noreferrer"><code>equals</code> contract</a> and is a bug waiting to happen:</p> <pre><code>// Don't do this: Set&lt;String&gt; setA = new TreeSet&lt;String&gt;(String.CASE_INSENSITIVE_ORDER); setA.add("hello"); setA.add("Hello"); System.out.println(setA); Set&lt;String&gt; setB = new HashSet&lt;String&gt;(); setB.add("HELLO"); // Bad code; violates symmetry requirement System.out.println(setB.equals(setA) == setA.equals(setB)); </code></pre> <hr> <p>It is better to use a dedicated type:</p> <pre><code>public final class CaselessString { private final String string; private final String normalized; private CaselessString(String string, Locale locale) { this.string = string; normalized = string.toUpperCase(locale); } @Override public String toString() { return string; } @Override public int hashCode() { return normalized.hashCode(); } @Override public boolean equals(Object obj) { if (obj instanceof CaselessString) { return ((CaselessString) obj).normalized.equals(normalized); } return false; } public static CaselessString as(String s, Locale locale) { return new CaselessString(s, locale); } public static CaselessString as(String s) { return as(s, Locale.ENGLISH); } // TODO: probably best to implement CharSequence for convenience } </code></pre> <p>This code is less likely to cause bugs:</p> <pre><code>Set&lt;CaselessString&gt; set1 = new HashSet&lt;CaselessString&gt;(); set1.add(CaselessString.as("Hello")); set1.add(CaselessString.as("HELLO")); Set&lt;CaselessString&gt; set2 = new HashSet&lt;CaselessString&gt;(); set2.add(CaselessString.as("hello")); System.out.println("1: " + set1); System.out.println("2: " + set2); System.out.println("equals: " + set1.equals(set2)); </code></pre> <p>This is, unfortunately, more verbose.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload