如何从自定义对象列表中获取特定属性值的数组

时间:2013-11-27 15:18:46

标签: java java-7

我有一个List<MyClass>MyClass中有一个名为 attribute1 的属性。

现在的问题是,如何将List<MyClass>中的 attribute1 值作为数组从而无需遍历列表。

建议没有循环或迭代的解决方案。

4 个答案:

答案 0 :(得分:3)

您可以使用Guava's FluentIterable来收集元素,这是一个假设attribute1是整数

的示例
    //populated
    List<MyClass> yourList;

    List<Integer> listbyAttribute = FluentIterable.from(yourList)
            .transform(new Function<MyClass, Integer>() {
        public Integer apply(MyClass f) {
            return f.getAttribute1();
        }
    }).toList();

这个番石榴课更有趣:here

答案 1 :(得分:1)

您可以创建自己的实现LIST接口的类。你应该基本上执行与list的其他实现完全相同的实现,除了;

1)你在add方法中,每次添加一个新元素时,都将它附加到一个字符串数组中,该数组是你类的一个变量。

2)并添加一个额外的方法,让我们说giveMyAttribute1List并返回我前面提到的变量列表。

你基本上得到了答案。

List<MyClass> a = new myListIMpl<MyClass>();
a.giveMyAttribute1List();

答案 2 :(得分:0)

如果这是一个棘手的问题,你(你自己)不允许使用 for-each iterator ,也不允许使用旧式 -loop (就像在求职面试中被问到的那样),我建议使用以下内容:

Collections.sort(myList, myComparator)

并创建比较器

public class MyClassComparator implements Comparator<MyClass> {
    @Override
    public int compare(final MyClass o1, final MyClass o2) {
      // implement
    }
}

并以这种方式实施compare方法, attribute1 位于前面(或后面,或您知道的某个地方)。然后,您可以轻松地从列表中获取元素,而无需手动循环。 但这个答案只适用于某种“求职面试问题”,否则循环列表很可能是你唯一的选择。

答案 3 :(得分:0)

如果要获取List中每个元素的属性值,则必须访问该List的每个元素。换句话说,您必须迭代每个元素。无论您是按循环顺序访问元素还是以某种荒谬的方式随机访问元素,您都是循环/迭代。

你所要求的是不可能的。