迭代异构列表

时间:2016-02-18 19:30:04

标签: java loops data-structures collections

我有一个返回列表的方法,如

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
            } 
         ....
        }

我需要在循环中追加list的元素。 他们有更好的方法来实现这一点,可能没有使用instanceof运算符。

2 个答案:

答案 0 :(得分: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;
}

编辑:您可以覆盖该类的toString()方法并在您的代码中使用它(上面添加)

答案 1 :(得分: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);