我应该如何在Java中创建一个Set,然后在构造时向其中添加对象。我希望做的事情像这样:
testCollision(getObject(), new HashSet<MazeState>(){add(thing);});
但是那似乎不完全正确。
我应该如何在Java中创建一个Set,然后在构造时向其中添加对象。我希望做的事情像这样:
testCollision(getObject(), new HashSet<MazeState>(){add(thing);});
但是那似乎不完全正确。
Collections.singleton(thing);
Stream.of(thing, thingToo).collect(Collectors.toSet());
Java 5 中
new HashSet<MazeState>(Arrays.asList(thing));
Arrays.asList(thing)
将你的 thing
转换成只有一个元素的列表,然后从该列表创建 set。
参考链接:
http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T...)
自 Java 9 起,您也可以这样做:
Set<String> immutableSet = Set.of("value1", "value2");
Set<Integer> immutableInt = Set.of(1, 2);
List<String> immutableList = List.of("item1", "item2");
Map<String, String> immutableMap = Map.of("key1", "value1", "key2", "value2", "key3", "value3");
请注意,用这种方式创建的任何集合/映射表/列表都是不可变的(如果我的命名约定没有说服你的话;)testCollision(getObject(), new HashSet<MazeState>(){{ add(obj1); add(obj2);}};
或:Set<String> set = new HashSet<String>(){{
add("hello");
add("goodbye");
}};
这被称为双括号初始化,它是 Java 的较为不知名的特性之一。其作用是让编译器为您创建一个匿名内部类来完成对象的创建和操作(例如,如果您的类是 final 类,您就不能使用它)。如果您不介意不可变性,则可以使用Google Guava的ImmutableSet
类:
ImmutableSet.of(new MazeState(), new MazeState());
com.google.common.collect
的util方法,它非常不错:Sets.newHashSet("你的值1", "你的值2");
其他答案都是正确的,但我想再补充一种方法。使用初始化块
new HashSet<MazeState>() {
{
add(new MazeState());
add(new MazeState());
}
};
Collections.singletonList
方法。 - Sebastian Kramer