2017-03-07 100 views
0

我想將對象列表轉換爲我自己的類類型的列表。到目前爲止,我在做什麼是:Java - 鑄造列表<Object>到列表<Entity>

List<Company> companies = (List<Company>)(Object) repository.findAllCompanyNames(); 

repository.findAllCompanyNames()返回一個List<Object>

我公司類的樣子:

public class Company { 

    public Company(){} 

    public Company(int id, String name){ 
     this.id = id; 
     this.name = name; 
    } 

    public int id; 
    public String name; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

我沒有得到任何錯誤的問題是價值演員表companies這是:

companies = {[email protected]} size = 4 
0 = {Object[2]@11753} 
    0 = {[email protected]} "1" 
    1 = "Company 1" 
1 = {Object[2]@11754} 
    0 = {[email protected]} "3" 
    1 = "Company 3" 
2 = {Object[2]@11755} 
    0 = {[email protected]} "4" 
    1 = "Company TT" 
3 = {Object[2]@11756} 
    0 = {[email protected]} "5" 
    1 = "Company 34" 
4 = {Object[2]@11757} 

,我認爲companies列表應包含公司對象,如:

- Id: 1 
- Name: Company 1 
- etc .. 

任何想法,這是怎麼回事?

+0

但是,從那裏顯示,它確實包含它?您只需從類本身和「List」中打印附加哈希碼。 – SomeJavaGuy

+6

只是鑄造不會改變對象... –

+0

你的'repository.findAllCompanyNames'實際返回什麼?如果它沒有返回公司,鑄造不會改變一件事情。 –

回答

3

不,該列表不應該包含Company對象,因爲您不是檢索公司,而是檢索它們的名稱。該方法被稱爲findAllCompanyNames(),它返回一個List<Object[]>(運行時類型),每個元素包含(假定)公司名稱和公司名稱。

如果您顯示存儲庫類,它應該更明顯,您可能會找到一個方法返回您想要的公司對象。

0

您能否使用java-8?你可以只改變一個List<Object[]>到使用stream一個List<Company>

List<Object[]> companies = Arrays.asList(
      new Object[]{1, "Company nam 1"}, 
      new Object[]{2, "Company nam 2"} 
); 

現在我們可以轉換companiesList<Company>

List<Company> companyList = companies.stream().map(
       o -> new Company((Integer) o[0], (String) o[1]) 
).collect(Collectors.toList()); 

我希望這有助於。