【问题标题】:Modify all elements into unknown type of list将所有元素修改为未知类型的列表
【发布时间】:2014-11-01 19:41:13
【问题描述】:

如何将所有元素修改为未知类型的列表?

for (Person person : persons) {
            person = transformer.transform(person);
        }

但是这种结构每次都会产生新的人,我知道这是错误的。而且我想最好使用迭代器,但是我不知道我应该怎么做。请不要给我任何指向 javadoc 迭代器的链接。 好的,如果是 ArrayList 我只需要这样做

 for (int i = 0 ; i < persons.size ; i++) {
                persons[i] = transformer.transform(persons[i]);
            }

【问题讨论】:

  • 未知类型的列表是什么意思?您已经知道列表是Person 中的List。你想做什么修改?
  • 你的问题很不清楚。 “未知类型的列表”是什么意思?你的“这个建筑每次都会创造新的人”是什么意思?请花点时间为您要实现的目标提供更多背景信息,最好是简短但完整的程序。
  • 我的意思是我只知道 List,但我不知道它基于什么。它可能是 ArrayList 或任何其他
  • 你的问题我还不清楚。你到底想用这个 Person 集合做什么?
  • 您不必知道它是什么类型的 List 才能工作,这是使用 List 接口而不是具体的 List 类型的美妙之处。你的问题我还不清楚。

标签: java list iterator updates


【解决方案1】:

您可以使用接口List 的方法set 轻松替换Person 的转换实例(这意味着每个List 实现,如ArrayListLinkedList 都支持):

for (int i = 0; i < persons.size(); i++) {
    final Person person = persons.get(i);
    persons.set(i, transformer.transform(person)); // replace new instance of "Person"
    // do other stuff with "person"
}

请注意,仅当方法 transform 返回 Person 的新实例时,才需要使用 set。如果它只是修改提供的实例,那么您只需要遍历您的列表:

for (Person person : persons) {
    transformer.transform(person); //just modify the current "Person" instance
}

【讨论】:

    【解决方案2】:

    首先,您不能重新定义 Java for (object obj : objects) 循环的元素。除非 transform() 改变了 Person 对象的属性,否则您将不得不使用另一个进行迭代以进行构造:

    for (int i = 0; i < persons.size(); i++) {
        // use persons.set() here to reassign the index in persons
    }
    

    此外,您通常不需要确切知道您得到的是哪种List。像 List 这样的接口背后的想法是,实现它的每个对象都可以在调用 List 的地方使用。它们的每个属性和方法都是 List 接口中的超集。

    【讨论】:

      【解决方案3】:

      为什么不用番石榴?

      Collections2.transform(collection, new Function<Person, Person>() {
              @Override
              public Person apply(Person person) {
                  return transformer.transform(person);
              }
      });
      

      但最好只修改当前的 Person 实例。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-20
        • 2020-11-02
        • 1970-01-01
        • 1970-01-01
        • 2018-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多