Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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
在Java8中对不同的对象流执行flatmap时,是否可以合并列表属性?_Java_Java 8 - Fatal编程技术网

在Java8中对不同的对象流执行flatmap时,是否可以合并列表属性?

在Java8中对不同的对象流执行flatmap时,是否可以合并列表属性?,java,java-8,Java,Java 8,我有一个流操作,它不是我想要的 鉴于这种数据结构 CatOwner { id, name, List <CatType> } 它会产生这个 { id : 1, name: Steve, cattype : [tabby, ginger, black] } { id : 2, name: Mandy, cattype : [tortashelle, manx, grey] } 有人能帮忙吗?你可以通过创建一个中间地图来实现,但它不

我有一个流操作,它不是我想要的

鉴于这种数据结构

CatOwner {
    id, 
    name, 
    List <CatType>
}           
它会产生这个

{ id : 1, name: Steve, cattype : [tabby, ginger, black] }
{ id : 2, name: Mandy, cattype : [tortashelle, manx, grey]  }

有人能帮忙吗?

你可以通过创建一个中间地图来实现,但它不是很漂亮

Collection<CatOwner> values = owners.stream()
    // blah blah, the other stuff you had
    .collect(
        Collectors.toMap(
            owner -> new Pair<>(owner.getId(), owner.getName()),
            Function.identity(),
            (a, b) -> {
                a.getTypes().addAll(b.getTypes());
                return a;
            }
        )
    )
    .values();
这表示映射的值是
CatOwner
项本身(即映射是
Pair
CatOwner

这意味着,如果发生冲突(两个具有相同ID和名称的项目),解决方法是将所有类型从一个
CatOwner
添加到另一个

(a, b) -> {
    a.getTypes().addAll(b.getTypes());
    return a;
}
结果是一个
集合
,因为您获取地图的所有值。如果您确实想要/需要一个列表,您可以将这些值添加到一个新列表中

new ArrayList<>(values);
newarraylist(值);

您可能需要更正问题中的
catOwners
的用法。这是模棱两可的。理想的解决方案是收集
toMap
并选择
extAccountDetails
作为键,然后合并
列表
以获得值。您应该查看变量名称
getCatOwners
==function
catOwners
,然后您有
catOwners
列表,您有类
CatOwner
,作为列表的一种类型,您可以使用
catOwners
,如果您提供一个完整的CatOwner类以及一些测试数据填充的列表,这也会有所帮助。谢谢,很抱歉,我尝试了一下整理示例代码。CatOwner是一个基本的pojo,有能手、二传手等。但如果Naman的建议不能让我达到那个目的,我会填写它。
Collection<CatOwner> values = owners.stream()
    // blah blah, the other stuff you had
    .collect(
        Collectors.toMap(
            owner -> new Pair<>(owner.getId(), owner.getName()),
            Function.identity(),
            (a, b) -> {
                a.getTypes().addAll(b.getTypes());
                return a;
            }
        )
    )
    .values();
owner -> new Pair<>(owner.getId(), owner.getName())
Function.identity()
(a, b) -> {
    a.getTypes().addAll(b.getTypes());
    return a;
}
new ArrayList<>(values);