2016-02-18 3 views
1

У меня есть метод, который возвращает список какперебрать гетерогенный список

public List<Object> getSomeData(SomeBean sb) { 
    List<Object> data = Lists.newArrayList(); 
    data.add(sb.getId()); // Id->long 
    data.add(sb.getName()); // name->String 
    ..... 
    return data; 
} 

и теперь я должен пройти по этому списку, который я должен проверить Типу каждый раз, как

 for (int i = 0; i < data.size(); i++) { 
      if (data.get(i) instanceof String) { 
       //append 
      } 
      if (data.get(i) instanceof Long) { 
       //append 
      } 
     .... 
     } 

I необходимо добавить элементы списка в цикле. Их лучший способ достичь этого может быть без использования оператора instanceof.

+6

Почему вы добавляете имена и идентификаторы в один список? Если у них есть отношения, вы можете использовать класс для определения этих отношений. Если они этого не сделают - они не должны быть в одном списке. –

+1

Наличие такого списка в первую очередь. Если вам нужно смешивать объекты разных типов, вы делаете что-то неправильно. –

ответ

3

Вы должны создать класс для этих данных и вернуть его экземпляр вместо List.

class SomeEntity { 
    long id; 
    String name; 

    public SomeEntity(long id, String name) { 
    this.id = id; 
    this.name = name; 
    } 

    public long getId() { 
    return id; 
    } 

    public String getName() { 
    return name; 
    } 

    @Overrides 
    public String toString() { 
    return id + " " + name; 
    } 
} 

Просто используйте его в коде:

public SomeEntity getSomeData(SomeBean sb) { 
    SomeEntity entity = new SomeEntity(sb.getId(), sb.getName()); 
    return entity; 
} 

Edit: вы можете переопределить toString() метод класса и использовать его в коде (добавлено выше)

+0

На самом деле мне нужно добавить элементы списка в цикле. – Abs

+0

@Abs Переопределить метод toString() –

0

Здесь вы идете:

final List<Object> someData = new ArrayList<>(); 
    someData.add("stringValue"); //String 
    someData.add(1L); //Long Value 

    final String result = someData.stream() 
    .map(String::valueOf) 
    .collect(Collectors.joining(" ")); 

    System.out.println(result); 
Смежные вопросы