如何在java 8中使用reduce对列表进行排序?
发布时间:2020-12-15 02:11:04 所属栏目:Java 来源:网络整理
导读:我有对象列表List BoM在BoM中我有一个List BoMLine,现在我必须使用reduce对BoMine属性中的一个进行BoM列表排序,并在方法中返回一个已排序的List, public static ListBoM sortBoms() { ListBoM sortedBomList = new ArrayList(); BoM bomn = new BoM(); sorte
我有对象列表List< BoM>在BoM中我有一个List< BoMLine>,现在我必须使用reduce对BoMine属性中的一个进行BoM列表排序,并在方法中返回一个已排序的List,
public static List<BoM> sortBoms() { List<BoM> sortedBomList = new ArrayList<>(); BoM bomn = new BoM(); sortedBomList.add(bomList.parallelStream().reduce(bomn,(bom1,bom2) -> sortBoM(bom1,bom2))); System.out.println(sortedBomList.size()); return sortedBomList; } bomList是BoM的列表,sortBoM方法: private static BoM sortBoM(BoM bom1,BoM bom2) { bom2.getLine().stream() .sorted((l1,l2) -> l1.getLineNum().compareTo(l2.getLineNum())); bom1 = bom2; return bom1; } BoM课程: public class BoM implements Domain { private String BomCode; private List<BoMLine> line = new ArrayList<BoMLine>(); public String getBomCode() { return BomCode; } public void setBomCode(String bomCode) { BomCode = bomCode; } public List<BoMLine> getLine() { return line; } public void setLine(List<BoMLine> line) { this.line = line; } public void addLine(BoMLine bomLine) { bomLine.setbOM(this); line.add(bomLine); }} 和BoMLine类: public class BoMLine implements Domain { private Long lineNum; private String material; private BigDecimal Qty; private BoM bOM; public Long getLineNum() { return lineNum; } public void setLineNum(Long lineNum) { this.lineNum = lineNum; } public String getMaterial() { return material; } public void setMaterial(String material) { this.material = material; } public BigDecimal getQty() { return Qty; } public void setQty(BigDecimal qty) { Qty = qty; } public BoM getbOM() { return bOM; } public void setbOM(BoM bOM) { this.bOM = bOM; } public String getBoMCode() { return bOM.getBomCode(); } @Override public String toString() { return "BoMLine [ bOM=" + bOM.getBomCode() + ",lineNum=" + lineNum + ",material=" + material + ",Qty=" + Qty + "]"; }} 我必须通过BoMLine lineNum订购BoM列表. 解决方法
您可以使用Comparator.comparing创建自定义Comparator,按行号的升序对每个BoMLine进行排序:
List<BoM> sortedBomList = new ArrayList<>(); sortedBomList.forEach(bom -> bom.getLine().sort(comparing(BoMLine::getLineNum))); 请注意,这将改变List< BoMLine>和列表< BoM>这可能不是一个好主意. 更好的方法是获取不变性并创建一个构造函数来获取bom代码和bom行列表: List<BoM> sortedBomList = bomList.stream() .map(bom -> new BoM( bom.BomCode,bom.getLine().stream() .sorted(comparing(BoMLine::getLineNum)) .collect(toList()) ) ) .collect(toList()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |