【发布时间】:2017-08-29 04:31:58
【问题描述】:
这是这个问题的延续Java 8 stream compare two objects and run a function on them
Class BigRequest{
String bId;
List<Parts> parts;
//getters and setter here
}
Class Parts{
String pId;
String partId;
//getters and setter here
}
我的问题是根据一些动态参数将集合(使用 java 8 流)拆分为更小的组件。 动态参数可以根据传递给方法 splitParts 的不同条件(在这里,我给出的示例为 getPartId() 相同)而变化,其返回类型是 List of Set of Parts
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();
如何根据动态参数拆分流(可能通过在 reduce 方法上调用功能接口),然后在其上运行方法?
我的函数的签名是
List<Set<Parts>> splitParts(BigObject b){}
我认为做这样的事情可能有助于保持分裂条件的动态,但我不知道该怎么做?
big.getParts().stream().reduce(MyFuncInterface::divide);
然后使用 forEach(),我想我可以遍历 List 并调用 abc() 方法。
我怎样才能做得更好?
非常感谢这里的任何帮助。
【问题讨论】:
-
这个很不清楚。 BigObject 和 Parts 是什么样的,你的 splitParts 方法应该做什么。与此类方法的 javadoc 一样精确。
-
你的 splitParts 方法应该做什么?与此类方法的 javadoc 一样精确。
-
我同意@JBNizet 的观点,即您的问题非常不清楚。 “动态参数”、“基于输入类型的更改”、“通过 reduce 方法调用功能接口”是什么意思?这些短语都没有多大意义。如果您需要一些有效的帮助,您需要重新表述您的问题以减少歧义。
-
List和Sets 的顺序是什么?如果它是无序的,那么您希望结果是Collection的Sets -
@f.khantsis 我想要集合列表因为我想稍后索引元素。
标签: java java-8 java-stream