当前位置: 首页 > 知识库问答 >
问题:

根据不同的参数将Collection(使用java 8流)拆分为更小的组件

裴意
2023-03-14

这是这个问题的延续Java8流比较两个对象并在它们上运行一个函数

Class BigRequest{
    String bId;
    List<Parts> parts;
    //getters and setter here
    }

Class Parts{
String pId;
String partId;
//getters and setter here
}

我的问题是根据一些动态参数将集合(使用Java8流)拆分成更小的组件。动态参数可以根据传递给方法splitParts的不同条件(这里,我给出的示例是getPartId()相同)而改变,该方法的返回类型是一组部件的列表

List<Set<Parts>> splitParts(BigRequest big){}

我尝试了以下方法:

 //groupingBy function but that returns a Map 
   Map<String, List<Parts>> parts = big.getParts().stream().collect(Collectors.groupingBy(Parts::getPartId));

//doesn't do it accurately
    big.getParts().stream().filter(p -> p.getPartId.equals(p.getPartId())).collect();

如何根据动态参数拆分流(可能通过调用函数接口而不是减少方法),然后在其上运行方法?

我的函数签名是

List<Set<Parts>> splitParts(BigObject b){}

我想这样做可能有助于保持分裂状态的动态性,但我不知道该怎么做?

 big.getParts().stream().reduce(MyFuncInterface::divide);

然后使用forEach(),我想我可以迭代列表并调用abc()方法。

我怎样才能做得更好?

非常感谢您的帮助。

共有1个答案

任长卿
2023-03-14

如果你想要一个列表

Map<String, Set<Parts>> parts = big.getParts().stream().collect(
        Collectors.groupingBy(Parts::getPartId, Collectors.toSet()));

调用部件。values()将返回一个集合

List<Set<Parts>> list = new ArrayList<>(parts.values());

或者,你可以将其重新流式传输,这样你就可以在一个呼叫链中完成:

List<Set<Parts>> list = big.getParts()
                           .stream()
                           .collect(Collectors.groupingBy(Parts::getPartId,
                                                          Collectors.toSet()))
                           .values()
                           .stream()
                           .collect(Collectors.toList());

 类似资料:
  • 基本上,我要问的是给定一个正方形2D阵列和一个有效的补丁大小(2D子阵列的大小),我将如何做到这一点。最终,我不需要以任何方式存储子阵列,我只需要找到每个子阵列的中值并将它们存储在一个一维阵列中。中值和存储到新阵列对我来说很简单,我只是不知道如何处理原始2D阵列并正确拆分它。我已经尝试了几次,但一直出现越界错误。我有一个4x4: 我需要像这样拆分它 < code>[1,2] [3,4] [2,3]

  • 问题内容: 我有一个电子邮件数组(可以是1封电子邮件,也可以是100封电子邮件),我需要用ajax请求发送该数组(我知道该怎么做),但是我只能发送一个包含以下内容的数组不超过10封电子邮件。因此,如果原始阵列中包含20封电子邮件,我将需要将其拆分为2个阵列,每组10个。或者,如果原始数组中有15封电子邮件,那么1数组中的10封电子邮件,以及另一个数组中的5封电子邮件。我使用的是jQuery,哪种方

  • 我有一个具体的问题。也有一些类似的问题,但这些问题要么与Python有关,而不是与Java有关,要么即使问题听起来类似,需求也不同。 我有一份价值观清单。 最后,我想根据列表的值对列表进行拆分。我的意思是,如果值大于零,它将保留在原始列表中,负值列表中的相应索引将设置为零。如果该值小于零,它将转到负值列表,原始列表中的负值将替换为零。 结果列表应该是这样的; 有没有办法解决这个流api在Java?

  • 我想使用Java8 streams API对数据进行分组。所有具有父_id的行都应分组在一起。下面是示例文本文件。结果应该是一个映射,其中id是一个整数,值是各自分组的行。例如,在下面的例子中,结果将是一个包含3个条目的映射。键1对应2个值,键2对应无值,键3对应1个值。 代码片段是: 输出可以是:。 简单的规则是:如果父母ID不是空的,这些记录应该被分组到一个列表中。这个列表将被视为map中的值