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