Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 由确定字段索引的对象的容器_Java_Java 8_Containers - Fatal编程技术网

Java 由确定字段索引的对象的容器

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));

我有一组对象,我需要通过对象的确定域来索引。有一个使用HashMap的示例实现(更新:实际上,HashMap只是用于说明,我并不坚持我要寻找的容器一定是HashMap)

我需要一个包含
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
    对象列表。