Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.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_Algorithm_Java Stream_Distinct - Fatal编程技术网

如何使用具有java流属性的不同对象列表创建不同对象的列表

如何使用具有java流属性的不同对象列表创建不同对象的列表,java,algorithm,java-stream,distinct,Java,Algorithm,Java Stream,Distinct,我在为一组数据创建逻辑数据时遇到了一个算法问题,如下所示: |-------|--------| | id | ctx_id | |-------|--------| | 1 | 1001 | | 1 | 1002 | | 1 | 1003 | | 1 | 1004 | | 2 | 2001 | | 2 | 2002 | | 2 | 2003 | ------------------ 这是我从数据库中获得

我在为一组数据创建逻辑数据时遇到了一个算法问题,如下所示:

|-------|--------|
|  id   | ctx_id |
|-------|--------|
|   1   |  1001  |
|   1   |  1002  |
|   1   |  1003  |
|   1   |  1004  |
|   2   |  2001  |
|   2   |  2002  |
|   2   |  2003  |
------------------
这是我从数据库中获得的列表,作为包含
id
ctx\u id
list
对象。我想要实现的是创建这样的实体的两个对象:

private class UserData {
    private long id;
    private List<long> contextList;
}
私有类用户数据{
私人长id;
私有列表上下文列表;
}
每个用户都有一个ID和分配给他的上下文。我想要实现的是操作上表中的数据,这样我就可以创建两个
UserData
对象,一个包含
id=1
和一个包含
100110031004
的列表,第二个
UserData
对象,包含
id=2
和一个包含
20022003
的列表


我怎样才能做到这一点?我尝试在
流()上使用
filter()
,在这个
列表
对象上使用
filter()
,但没有付出任何努力…

第一步是使用
id
上的分组将
用户上下文
收集到
地图
。然后将该映射流化并将每个条目转换为
UserData

    usersContexts.stream()
                 .collect(Collectors.groupingBy(UsersContexts::getId, 
                         Collectors.mapping(UsersContexts::getCxtId, Collectors.toList())))
                 .entrySet()
                 .stream()
                 .map(entry->new UserData(entry.getKey(), entry.getValue()))
                 .collect(Collectors.toList());
您可以使用带有合并功能的
map()
函数和
toMap()
收集器

Collectio<UserData> usersData = usersContexts.stream()
      .map(u -> new UserData(u.getId(), new ArrayList<>(singletonList(u.getCtx_id()))))
      .collect(Collectors.toMap(UserData::getId, Function.identity(),
                 (o, o2) -> { o.getContextList().addAll(o2.getContextList());return o; }))
      .values();
Collectio usersData=usersContexts.stream()
.map(u->newuserdata(u.getId(),newarraylist(singletonList(u.getCtx_id())))
.collect(Collectors.toMap(UserData::getId,Function.identity(),
(o,o2)->{o.getContextList().addAll(o2.getContextList());返回o;})
.values();

查看
groupingBy
例如,刚才在中所述。尝试一下,如果有什么问题不起作用,请写回这里编辑问题。至于现在,这需要更多的关注。@dziki您可以使用单流。