如何在最终的 TreeSet 中创建硬编码的不区分大小写的值,以便只有“香蕉”而不是“香蕉”作为另一个值 [重复]

Posted

技术标签:

【中文标题】如何在最终的 TreeSet 中创建硬编码的不区分大小写的值,以便只有“香蕉”而不是“香蕉”作为另一个值 [重复]【英文标题】:how to create hard coded Case Insensitive Values in a final TreeSet so as to have only "Banana" not "banana" as another value [duplicate] 【发布时间】:2019-07-18 09:18:59 【问题描述】:

我想创建不区分大小写的最终 TreeSet 水果值。 有什么办法,我可以在 fruits1-variable 声明中改变一些东西,这样我就可以获得想要的结果并且可以避免方法 addFruits()

import java.util.Arrays;
import java.util.SortedSet;
import java.util.TreeSet;

public class Fruits 

public static SortedSet<String> fruits = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);


//public static final SortedSet<String> fruits1 = new TreeSet<>(Arrays.asList("Apple", "Banana", "Orange", "Pineapple", "banana"));

public void addFruits()
    fruits.add("Apple");
    fruits.add("Banana");
    fruits.add("Orange");
    fruits.add("PineApple");
    fruits.add("banana");

【问题讨论】:

fruits1.addAll(Arrays.asList(...))? 为什么是重复的?他可能不是很清楚,但他正在尝试获得一个结合了TreeSet(Collection)TreeSet(Comparator) 的构造函数。 【参考方案1】:

您可以使用双括号初始化或静态块,但您的解决方案不会阻止您使用 final:

//double brace initialization
private static final Set<String> FRUITS = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER) 
    this.add("Apple");
    this.add("Banana");
    this.add("Orange");
    this.add("PineApple");
    this.add("banana");
;

//Or a static block
static 
    FRUITS.add("Apple");
    FRUITS.add("Banana");
    FRUITS.add("Orange");
    FRUITS.add("PineApple");
    FRUITS.add("banana");

另外考虑将双括号初始化包装在Collections#unmodifiableSet 中以防止其被修改

【讨论】:

以上是关于如何在最终的 TreeSet 中创建硬编码的不区分大小写的值,以便只有“香蕉”而不是“香蕉”作为另一个值 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

TreeSet

如何在 Spring MVC 中的不同类中创建动态 bean

如何在 Pig 中创建不区分大小写的匹配?

接受所有数据类型的不区分大小写的 C++ 排序?

如何在 Django 中创建不区分大小写的数据库索引?

不改变 POJO 的不区分大小写的 JSON 到 POJO 的映射