【发布时间】:2014-10-10 23:55:27
【问题描述】:
我尝试了解新的 Java 8 Streams,并尝试了几天来将嵌套的 foreach 循环转移到 Java 8 Streams 中的集合上。
是否可以重构以下嵌套的 foreach 循环,包括 Java-8-Streams 中的 if 条件?
如果是的话会是什么样子。
ArrayList<ClassInq> Inq = new ArrayList<>();
TreeMap<String, SalesQuot> Quotations = new TreeMap<>();
ArrayList<ClassInq> tempInqAndQuot = new ArrayList<>();
ArrayList<SalesQuot> tempQuotPos = new ArrayList<>();
for(ClassInq simInq : this.Inq) {
if(!simInq.isClosed() && !simInq.isDenied()) {
for(Map.Entry<String, SalesQuot> Quot: Quotations.entrySet()) {
SalesQuot sapQuot = Quot.getValue();
if(sapQuot.getInquiryDocumentNumber().compareTo(simInq.getSapInquiryNumber()) == 0) {
simInq.setSAPQuotationNumber(sapQuot.getQuotationDocumentNumber());
tempInqAndQuot.add(simInq);
for(Map.Entry<String, SalesQuotPosition> quotp : sapQuot.getPosition().entrySet()) {
tempQuotPos.add(quotp.getValue());
}
}
}
}
}
非常感谢您的帮助。
BR
【问题讨论】:
-
你确定这段代码是正确的吗?由于您在内循环中调用了
tempInqAndQuot.add(simInq),因此您将多次添加相同的对象到相同的集合中。 -
应该将
tempQuotPos定义为ArrayList<SalesQuotPosition>吗? -
您好,arraylist 必须来自 SalesQuotPosition 类型
标签: java collections foreach java-8 java-stream