簡體   English   中英

通過將字符串(來自數組)分配為對象的參數之一,將其他參數設置為空,將字符串數組轉換為對象列表

[英]Convert String array to List of Objects by assigning the string(from array) as one of the parameter of the Object leaving other parameters as null

我有一個字符串數組

adrs[] = {
    "BD Jules Ferry",
    "Rue de Republique",
    "Avenue de Julin"};

我有一個名為“地址”的對象(為簡單起見,省略了// getter setter)

public class Address{

     adrsLine1 String;

     adrsLine2 String;

     adrsLine3 String;

     postalCode String;

}

我想通過將數組中的每個字符串分配為Address adrsLine1參數,將該adrs[]轉換為List<<Address>> addrsList

轉換后,我的addrsList每個地址對象都會像這樣,

  • addrsList.get(0)將具有[BD Jules Ferry,null,null,null]
  • addrsList.get(1)將具有[Rue de Republique,null,null,null]
  • addrsList.get(2)將具有[Avenue de Julin,null,null,null]

我使用Java 8,目前,我使用for loop來實現這一點,Java 8中是否有任何捷徑或更有效的方法?

樣例代碼:

private String[] AdrsArray = {"BD Jules Ferry", "Rue de Republique", "Avenue de Julin"};

List<Address> addrsList = new ArrayList<>();

for (String adrsLine : AdrsArray){
    Address address = new ReturnAddress();
    address.setAdrsLine1(adrsLine);
    addrsList.add(address);
} 

輸出:

Address address = addrsList.get(0); 
address.getAdrsLine1() //should have "BD Jules Ferry"
address.getAdrsLine2() //should have null
address.getAdrsLine3() //should have null
address.getAdrsPostalCode() //should have null

您可以使用Java 8中可用的streams來簡化代碼,如下所示。

List<Address> addrsList = Arrays.stream(adrs).map(adr -> {
    Address address = new ReturnAddress();
    address.setAdrsLine1(adr);
    return address;
}).collect(Collectors.toList());
List<Address> addressList = Arrays.stream(AdrsArray)
                                  .map(Address::new)
                                  .collect(Collectors.toList());

您必須向Address類添加一個接受adrsLine1的構造adrsLine1

public class Address{

     private String adrsLine1;

     private String adrsLine2;

     private String adrsLine3;

     private String postalCode;

     Address(String address1) {
       adrsLine1 = address1;
     }

}

您可以使用流。 我建議您在Address類中實現一個構造函數,例如

Address(String adrsLine1) {
  this.adrsLine1 = adrsLine1;
}

然后,您可以使用以下簡短代碼段進行操作:

List<Address> addrsList = Arrays.stream(adrs)
    .map(adr -> new Address(adr))
    .collect(Collectors.toCollection(ArrayList::new));

如果需要特定的列表類型(例如ArrayList ,則應使用Collectors.toCollection(ArrayList::new) ;否則(如果您可以接受任何列表類型),則可以僅使用Collectors.toList()

暫無
暫無

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

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