簡體   English   中英

Java8 Collections 合並兩個具有不同對象和公共字段的不同列表

[英]Java8 Collections Merge two different list with different objects and a common field

我有兩個類,其中有一個公共字段。 基於公共領域部門需要獲取所有記錄和總金額的列表

根據部門 id 合並記錄並將每個部門 id 的金額相加的最佳方法是什么?

// "ABC",(sum(1234.00f+1000.00f))
// "pqr",(sum(1200.00f+500.00f)))
    // Expecting result as line 33, 34
package com.coll.java8.foreach;

public class Plist {
    private String department;
    private String posiName;
    private  double amount;
    


}
package com.coll.java8.foreach;

public class MList {
    
    private String nameString;
    private int id;
    private String department;

    

}
package com.coll.java8.foreach;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.maxBy;

import java.math.MathContext;

public class Managers {
    
    public static void main(String args[]) {
    
    
    List<MList> manList = new ArrayList<MList>();

    manList.add(new MList("Test1",123,"ABC"));
    manList.add(new MList("Test2",134,"pqr"));
    manList.add(new MList("Test3",456,"xyz"));
    
    List<Plist> posslist = new ArrayList<Plist>();
    
    posslist.add(new Plist("ABC","555",1234.00f));
    posslist.add(new Plist("pqr","444",1200.00f));
    posslist.add(new Plist("ABC","555",1000.00f));
    posslist.add(new Plist("xyz","555",25.00f));
    posslist.add(new Plist("pqr","444",500.00f));

    // "ABC",(sum(1234.00f+1000.00f))
    // "pqr",(sum(1200.00f+500.00f)))
    // Expecting result as line 33, 34

}

我有兩個類,其中有一個公共字段。

不,你沒有。 您有兩個類,每個類都有一個恰好具有相同名稱的字段。 Java 不會將其視為“公共字段”,因為沒有繼承或共享接口。

你需要做的是這樣的:

public abstract class BaseRecord {
  protected String department;

  public String getDepartment() { return department; }
}

public class PList extends BaseRecord {
...
}

您的某些請求有點難以理解,但是如果您想對 PList 的數量求和,您可以使用List

double total = myList.stream()
  .map(item -> item.getAmount())
  .sum();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM