根据不同的参数将集合(使用Java8流)拆分为更小的组件

根据不同的参数将集合(使用Java8流)拆分为更小的组件,java,java-8,java-stream,Java,Java 8,Java Stream,这是这个问题的继续 然后使用forEach(),我想我可以遍历列表并调用abc()方法 我怎样才能做得更好 非常感谢您的帮助。如果您需要列表,请先更改代码以获得地图: 或者,您可以将其重新流式传输,这样您就可以在单个调用链中执行此操作: List<Set<Parts>> list = big.getParts() .stream() .collect(Collect

这是这个问题的继续

然后使用forEach(),我想我可以遍历列表并调用abc()方法

我怎样才能做得更好

非常感谢您的帮助。

如果您需要
列表
,请先更改代码以获得
地图

或者,您可以将其重新流式传输,这样您就可以在单个调用链中执行此操作:

List<Set<Parts>> list = big.getParts()
                           .stream()
                           .collect(Collectors.groupingBy(Parts::getPartId,
                                                          Collectors.toSet()))
                           .values()
                           .stream()
                           .collect(Collectors.toList());
List List=big.getParts()
.stream()
.collect(收集器).groupingBy(部件::getPartId,
Collectors.toSet())
.values()
.stream()
.collect(Collectors.toList());
如果您想要
列表
,请首先更改代码以获得
地图

或者,您可以将其重新流式传输,这样您就可以在单个调用链中执行此操作:

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


这一点非常不清楚。BigObject和Part看起来像什么,splitParts方法应该做什么。在这种方法上要像javadoc一样精确。您的splitParts方法应该做什么?在这种方法上要尽可能精确,我同意@JBNizet的观点,你的问题很不清楚。“动态参数”、“基于输入类型的更改”、“通过reduce方法调用函数接口”是什么意思?这些短语都没有多大意义。如果你想得到一些有效的帮助,你需要将你的问题改写为不那么模棱两可。设置的
列表的顺序是什么?如果它是无序的,那么您希望结果是
集合
集合
s@f.khantsis我想要集合的列表,因为我想在以后索引元素。这是非常不清楚的。BigObject和Part看起来像什么,splitParts方法应该做什么。在这种方法上要像javadoc一样精确。您的splitParts方法应该做什么?在这种方法上要尽可能精确,我同意@JBNizet的观点,你的问题很不清楚。“动态参数”、“基于输入类型的更改”、“通过reduce方法调用函数接口”是什么意思?这些短语都没有多大意义。如果你想得到一些有效的帮助,你需要将你的问题改写为不那么模棱两可。设置的
列表的顺序是什么?如果它是无序的,那么您希望结果是
集合
集合
s@f.khantsis我想要集合的列表,因为我想稍后索引元素。以什么方式动态<代码>收集器。groupingBy()
需要一个
函数作为第一个参数。您可以声明该类型的变量,并为其分配任何兼容的方法引用、lambda表达式或匿名实现。为什么“假设复杂性非常高”?整个操作都是O(n)。@user2340345:你能不能停止使用“动态”这个词,只描述一下你想做什么?@user2340345你可以按任何方式进行分区,只要你能找到一个定义分区的
字符串
值。映射到同一
字符串
值的所有
部分将位于同一分区中,正如您提供给
groupingBy
函数所映射的那样。实际上,使用单链变量,甚至不依赖于组标准类型,因此任何
函数
都可以;不再需要生成
字符串了。在两步变体中,您必须将映射声明更改为
map
。以何种方式动态<代码>收集器。groupingBy()
需要一个
函数作为第一个参数。您可以声明该类型的变量,并为其分配任何兼容的方法引用、lambda表达式或匿名实现。为什么“假设复杂性非常高”?整个操作都是O(n)。@user2340345:你能不能停止使用“动态”这个词,只描述一下你想做什么?@user2340345你可以按任何方式进行分区,只要你能找到一个定义分区的
字符串
值。映射到同一
字符串
值的所有
部分将位于同一分区中,正如您提供给
groupingBy
函数所映射的那样。实际上,使用单链变量,甚至不依赖于组标准类型,因此任何
函数
都可以;不再需要生成
字符串了。在两步变体中,必须将映射声明更改为
map
 //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);
Map<String, Set<Parts>> parts = big.getParts().stream().collect(
        Collectors.groupingBy(Parts::getPartId, Collectors.toSet()));
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());