Java 由确定字段索引的对象的容器
我有一组对象,我需要通过对象的确定域来索引。有一个使用HashMap的示例实现(更新:实际上,HashMap只是用于说明,我并不坚持我要寻找的容器一定是HashMap) 我需要一个包含Java 由确定字段索引的对象的容器,java,java-8,containers,Java,Java 8,Containers,我有一组对象,我需要通过对象的确定域来索引。有一个使用HashMap的示例实现(更新:实际上,HashMap只是用于说明,我并不坚持我要寻找的容器一定是HashMap) 我需要一个包含Foo对象的容器,该对象由唯一的字符串字段id索引。因此,以下fooHashMap是当前的解决方案: HashMap<String, Foo> fooHashMap = null; fooHashMap.put("bar", Foo("bar", 1, 0.3, "aa", "bb", 0.8));
Foo
对象的容器,该对象由唯一的字符串字段id
索引。因此,以下fooHashMap
是当前的解决方案:
HashMap<String, Foo> fooHashMap = null;
fooHashMap.put("bar", Foo("bar", 1, 0.3, "aa", "bb", 0.8));
fooHashMap.put("tzar", Foo("tzar", 8, 12.3, "dlj", "no rule", 0.343));
// etc.
就我个人而言,我会使用您在最后发布的解决方案:
addFoo(new Foo("bar", 1, 0.3, "aa", "bb", 0.8));
addFoo(new Foo("tzar", 8, 12.3, "dlj", "no rule", 0.343));
然后让addFoo
方法处理其余部分:
public void addFoo(Foo foo) {
fooHashMap.put(foo.id, foo);
}
由于显然必须创建Foo
对象,因此我想不出更优雅的解决方案
如果您已经有了foo
对象的列表,您可以像这样创建地图
Map<String, Foo> fooMap = foos
.stream()
.collect(Collectors.toMap(f -> f.id, f -> f));
Map fooMap=foos
.stream()
.collect(Collectors.toMap(f->f.id,f->f));
就我个人而言,我会使用您在最后发布的解决方案:
addFoo(new Foo("bar", 1, 0.3, "aa", "bb", 0.8));
addFoo(new Foo("tzar", 8, 12.3, "dlj", "no rule", 0.343));
然后让addFoo
方法处理其余部分:
public void addFoo(Foo foo) {
fooHashMap.put(foo.id, foo);
}
由于显然必须创建Foo
对象,因此我想不出更优雅的解决方案
如果您已经有了foo
对象的列表,您可以像这样创建地图
Map<String, Foo> fooMap = foos
.stream()
.collect(Collectors.toMap(f -> f.id, f -> f));
Map fooMap=foos
.stream()
.collect(Collectors.toMap(f->f.id,f->f));
以下使用java-8可能会对您有所帮助:
id
实现getter(getId()
)doulist
的Foo
列表,并将其收集为地图,如下所示:
HashMap<String, Foo> = fooList.stream().collect(Collectors.toMap(Foo::getId, o -> o))
HashMap=dublist.stream().collect(Collectors.toMap(Foo::getId,o->o))
以下使用java-8可能会对您有所帮助:
id
实现getter(getId()
)doulist
的Foo
列表,并将其收集为地图,如下所示:
HashMap<String, Foo> = fooList.stream().collect(Collectors.toMap(Foo::getId, o -> o))
HashMap=dublist.stream().collect(Collectors.toMap(Foo::getId,o->o))
没有这样的事情;但是,根据您可能需要的具体内容,创建这样的方法——比如说groupBy特定字段并不难
删除和编辑也不是很难通过一些树映射实现,比如说。。。但是没有现成的东西。我发现的唯一的东西是没有这样的东西;但是,根据您可能需要的具体内容,创建这样的方法——比如说groupBy特定字段并不难
删除和编辑也不是很难通过一些树映射实现,比如说。。。但是没有现成的东西。我唯一发现的是
公共乘数
是什么?你为什么不想要addFoo
解决方案?谢谢@nullpointer。打字错误是fixed@ModusTollens事实上,如果可能的话,我不希望有两份相同的数据,因为有必要跟踪两份数据的一致性。例如,C++世界中有多个索引。我希望java中有一些类似的解决方案(可能有streams)@Loom如何使用addFoo
解决方案创建相同数据的两个副本?Java 8 streams只能使这一点更加优雅,但前提是您已经有了foo
对象列表。public Multiplier
是什么?为什么不想要addFoo
解决方案?谢谢@nullpointer。打字错误是fixed@ModusTollens事实上,如果可能的话,我不希望有两份相同的数据,因为有必要跟踪两份数据的一致性。例如,C++世界中有多个索引。我希望java中有一些类似的解决方案(可能有streams)@Loom如何使用addFoo
解决方案创建相同数据的两个副本?Java8Streams只能使这一点更加优雅,但前提是您已经有了foo
对象列表。