[英]create advanced HashMap, ArrayList, List
我正在嘗試使用 HashMap、ArrayList 創建一個看起來像這樣的結構,列表:
[
{
firstname=Firstname 1,
lastname=Lastname 1,
detail=[
{facturaId=1, date=2020/01/01},
{facturaId=2, date=2020/01/02},
{facturaId=3, date=2020/01/03}
]
},
{
firstname=Firstname 2,
lastname=Lastname 2,
detail=[
{facturaId=4, date=2020/01/01},
{facturaId=5, date=2020/01/02},
{facturaId=6, date=2020/01/03}
]
}
]
我的數據結構如下所示:
| factureid | date | firstname | lastname |
+-----------+----------+-----------+----------+
|1 |2020/01/01|Firstname 1|Lastname 1|
|2 |2020/01/02|Firstname 1|Lastname 1|
|3 |2020/01/03|Firstname 1|Lastname 1|
|4 |2020/01/01|Firstname 2|Lastname 2|
|5 |2020/01/02|Firstname 2|Lastname 2|
|6 |2020/01/03|Firstname 2|Lastname 2|
我不太熟悉 HashMap,這是我的嘗試:
List<Object[]> results = Info.find();
List<Map<String, String>> detail = new ArrayList<>();
results.stream().forEach((result) -> {
Map<String, String> detailMap = new HashMap<>();
detailMap.put("facturaId", result[0].toString());
detailMap.put("date", result[1].toString());
detail.add(detailMap);
});
System.out.println(detail);
打印:
[
{facturaId=1, date=2020/01/01},
{facturaId=2, date=2020/01/02},
{facturaId=3, date=2020/01/03},
{facturaId=4, date=2020/01/01},
{facturaId=5, date=2020/01/02},
{facturaId=6, date=2020/01/03}
]
不是我預期的結果。
Java是一種面向對象的語言。 因此,我們可以將這些數據組織成 class,而不是處理奇數位的數據。
Java 16 將新記錄功能帶到 Java 16,在 Java 15 (和 14)中預覽。 這使得定義 class 變得非常簡單。
你有名字和姓氏的人,每個人都持有一組發票。 所以我們需要一個Person
class 和一個Invoice
class。
record Invoice (Integer id , LocalDate received ) {};
record Person (String firstName , String lastName , Set<Invoice> invoices ){};
所以我們不再需要你說的Map
。 我們只需要一個Set
或Person
對象List
。
Set.of
和List.of
方法返回一個不可修改的集合。 這些方法提供了簡單的文字語法。
表示您的數據示例。 我更改了您第二個人的發票日期,它們與您的示例發票編號的順序相矛盾。
List < Person > people =
List.of(
new Person(
"Alice" ,
"Applecake" ,
Set.of(
new Invoice( 1 , LocalDate.of( 2020 , Month.JANUARY , 1 ) ) ,
new Invoice( 2 , LocalDate.of( 2020 , Month.JANUARY , 2 ) ) ,
new Invoice( 3 , LocalDate.of( 2020 , Month.JANUARY , 3 ) )
)
) ,
new Person(
"Bob" ,
"Barker" ,
Set.of(
new Invoice( 4 , LocalDate.of( 2020 , Month.JANUARY , 4 ) ) ,
new Invoice( 5 , LocalDate.of( 2020 , Month.JANUARY , 5 ) ) ,
new Invoice( 6 , LocalDate.of( 2020 , Month.JANUARY , 6 ) )
)
)
);
people.toString(): [Person[firstName=Alice, lastName=Applecake, invoices=[Invoice[id=1, received=2020-01-01], Invoice[id=2, received=2020-01-02],發票[id=3, received=2020-01-03]]], Person[firstName=Bob, lastName=Barker, invoices=[Invoice[id=4, received=2020-01-04], Invoice[id=5 , 收到=2020-01-05], 發票[id=6, 收到=2020-01-06]]]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.