2017-03-07 28 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()); 

我希望这有助于。