簡體   English   中英

創建高級 HashMap, ArrayList, List

[英]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 我們只需要一個SetPerson對象List

Set.ofList.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.

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