如何在java中创建Set,然后在构造时向其中添加对象.我想做的事情如下:
testCollision(getObject(), new HashSet<MazeState>(){add(thing);});
Run Code Online (Sandbox Code Playgroud)
但这似乎并不合适.
fsp*_*irn 58
从Java 7开始,要实例化单元素,不可变集合,您可以使用:
Collections.singleton(thing);
Run Code Online (Sandbox Code Playgroud)
返回仅包含指定对象的不可变集.返回的集是可序列化的.
在Java 8中,您可以使用以下内容实例化包含任意数量对象的Set,这是对此答案的修改:
Stream.of(thing, thingToo).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
Nik*_*bak 20
在Java 5中
new HashSet<MazeState>(Arrays.asList(thing));
Run Code Online (Sandbox Code Playgroud)
Arrays.asList(thing)将您转换thing为一个元素的列表,并从该列表集创建.
供参考:http:
//download.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T ...)
小智 15
从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");
Run Code Online (Sandbox Code Playgroud)
请注意,以这种方式创建的任何集/映射/列表都是不可变的(如果我的命名约定没有说服你;)
Kyl*_*lar 14
你可以使用双括号:
testCollision(getObject(), new HashSet<MazeState>(){{ add(obj1); add(obj2);}};
Run Code Online (Sandbox Code Playgroud)
要么:
Set<String> set = new HashSet<String>(){{
add("hello");
add("goodbye");
}};
Run Code Online (Sandbox Code Playgroud)
这称为双括号初始化,它是Java的一个鲜为人知的特性.它的作用是让编译器创建一个匿名内部类,为您创建和操作(例如,如果您的类是最终的,则无法使用它.)
现在,说过 - 我鼓励你只在你真正需要简洁的情况下使用它.更明确地说几乎总是更好,以便更容易理解您的代码.
小智 8
如果您不介意不变性,那么您可以使用Google Guava的ImmutableSet课程:
ImmutableSet.of(new MazeState(), new MazeState());
Run Code Online (Sandbox Code Playgroud)
您可以使用 util 方法com.google.common.collect,这是一个非常好的方法:Sets.newHashSet("your value1", "your valuse2");
| 归档时间: |
|
| 查看次数: |
39333 次 |
| 最近记录: |