我有一个List<MyClass>
,MyClass
中有一个名为 attribute1 的属性。
现在的问题是,如何将List<MyClass>
中的 attribute1 值作为数组从而无需遍历列表。
建议没有循环或迭代的解决方案。
答案 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
的每个元素。换句话说,您必须迭代每个元素。无论您是按循环顺序访问元素还是以某种荒谬的方式随机访问元素,您都是循环/迭代。
你所要求的是不可能的。