一次向 Java 5 HashSet 添加多个字段?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5654144/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 12:05:52  来源:igfitidea点击:

Add multiple fields to Java 5 HashSet at once?

java

提问by cmcculloh

Is there a better way to do this so I don't have to have 50 ".add()"s in there? Like a comma separated list or something (like JavaScript arrays).

有没有更好的方法来做到这一点,所以我不必在那里有 50 个“.add()”?像逗号分隔的列表或其他东西(如 JavaScript 数组)。

private static final Set<String> validStates = new HashSet<String>();

validStates.add("AL");
validStates.add("AK");
validStates.add("AZ");
validStates.add("AR");
validStates.add("CA");
validStates.add("CO");
validStates.add("CT");
validStates.add("DE");
validStates.add("DC");
validStates.add("FL");
validStates.add("GA");
validStates.add("HI");
validStates.add("ID");
validStates.add("IL");
validStates.add("IN");
validStates.add("IA");
validStates.add("KS");
validStates.add("KY");
validStates.add("LA");
validStates.add("ME");
validStates.add("MD");
validStates.add("MA");
validStates.add("MI");
validStates.add("MN");
validStates.add("MS");
validStates.add("MO");
validStates.add("MT");
validStates.add("NE");
validStates.add("NV");
validStates.add("NH");
validStates.add("NJ");
validStates.add("NM");
validStates.add("NY");
validStates.add("NC");
validStates.add("ND");
validStates.add("OH");
validStates.add("OK");
validStates.add("OR");
validStates.add("PA");
validStates.add("RI");
validStates.add("SC");
validStates.add("SD");
validStates.add("TN");
validStates.add("TX");
validStates.add("UT");
validStates.add("VT");
validStates.add("VA");
validStates.add("WA");
validStates.add("WV");
validStates.add("WI");
validStates.add("WY");

Something like:

就像是:

validStates.add("AL", "AK", "...");

回答by BalusC

The HashSethas a constructor taking a Collection. The Arrays#asList()takes arguments as varargsand returns a List(which is a Collection). So, you could do it as follows:

HashSet一个构造服用Collection。所述Arrays#asList()接受参数作为可变参数,并返回List(这是一个Collection)。所以,你可以这样做:

validStates = new HashSet<String>(Arrays.asList("AL", "AK", ".."));

It makes however more sense to have them in some properties file or in a DB which you load by one or two lines of code so that you don't need to hardcode them all in Java.

然而,将它们放在一些属性文件或数据库中更有意义,您可以通过一两行代码加载它们,这样您就不需要在 Java 中对它们全部进行硬编码。

If you were on Java 8+, you could just use Stream#of().

如果您使用的是 Java 8+,则可以使用Stream#of().

validStates = Stream.of("AK", "AL", "..").collect(Collectors.toSet());

回答by skaffman

If you fancy using the excellent Google Guava library, you can use:

如果您喜欢使用优秀的Google Guava 库,您可以使用:

Set<String> validStates = Sets.newHashSet("AL", "AK", "...");

回答by DHall

You could have a static String[]with all the states, then iterate over the array:

你可以有一个String[]包含所有状态的静态,然后遍历数组:

String states[] = {"AL","AK","AZ","AR",...etc...};
for (String currState : states) {
   validStates.add(currState);
}

I don't remember if this "foreach" construct came in 1.5 or 1.6....

我不记得这个“foreach”构造是在 1.5 还是 1.6 中出现的....

回答by Snehal

HashSet<String> hs = Sets.newHashSet("abc","xyz");