【问题标题】:Case-insensitive sorted Set - keep same string with different case不区分大小写的排序集 - 使用不同的大小写保持相同的字符串
【发布时间】:2014-09-29 13:51:08
【问题描述】:

今天我有一个不区分大小写的排序 Set 像:

Set<String> set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
set.add("foo");
set.add("FOO");
set.add("bar");
System.out.println(set.toString());

这个输出是:

[bar, foo]

但我真正想要的是:

[bar, FOO, foo]

也就是说,我希望集合的 排序 不区分大小写,但我希望能够在不同的情况下使用相同的字符串(如“foo”和“FOO”)集合,没有丢弃最后一个。

我知道我可以排序 List,但就我而言,我需要 Set。

在 Java 中有没有一种简洁的方法来做到这一点?

【问题讨论】:

  • 我认为你不能保证在foo 和String.CASE_INSENSITIVE_ORDER 之前得到FOO,如果这是你所期望的。这是一个不敏感的排序,所以对于排序,FOO 和 foo 是同一个东西,因此可以以任何顺序出现。
  • @T.J.Crowder FOO 和 foo 的顺序并不重要,棘手的部分是将它们都放在集合中,同时将 bar 放在 @987654335 之前@.

标签: java sorting set case-insensitive


【解决方案1】:

您可能希望使用不区分大小写排序的比较器,然后将区分大小写的排序用作决胜局。

比如:

Set<String> set = new TreeSet<>((a, b) -> {
    int insensitive = String.CASE_INSENSITIVE_ORDER.compare(a, b);
    return insensitive==0 ? a.compareTo(b) : insensitive;
});

【讨论】:

  • 男人我喜欢 lambdas。
猜你喜欢
  • 1970-01-01
  • 2015-04-22
  • 2011-03-08
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多