我有一个简单的问题,但我不知道如何搜索它...
假设我有一个对象列表,List和MyObject是这样的:
List<MyObject> mo;
class MyObject{
private SecondObject so;
}
class SecondObject{
private String sp;
}
我想检索MyObject列表中的字符串参数列表,我管理的唯一方法是在List上循环...
有更聪明/更快的方式吗?
谢谢你,再见!!
答案 0 :(得分:1)
如果我理解了您的问题,可能应该使用 Map<String, Object>
,您可以通过键访问元素(无需循环)。 />
您必须使用列表中的元素初始化地图:SecondObject.sp为键,MyObject为对象。
答案 1 :(得分:0)
你可以使用Guava库。特别是Iterables.transform()
方法。
以下是一个例子:
List<MyObject> list = ...
Iterable<String> strings = Iterables.transform(list,
new Function<MyObject, String>() {
@Override
public String apply(MyObject obj) {
return obj.getSecondObject().getSp();
}
});
答案 2 :(得分:0)
我认为没有直接的方法。但您可以创建自己的自定义列表。
public class CustomList implements List<MyObject> {
private List<SecondObject> list = new ArrayList<SecondObject>();
private List<MyObject> listMy = new ArrayList<MyObject>();
public List<SecondObject> getSecondList(){
return list;
}
@Override
public void add(int index, MyObject element) {
listMy.add(index, element);
list.add(index, element.sp);
}
....... // Override other methods also
}
现在您可以使用getSecondList()来获取SecondObjectList。它会比枚举更快。
注意:您还必须根据您的要求覆盖List界面中的其他方法。
答案 3 :(得分:0)
使用java 8,您可以执行以下操作:
List<MyObject> myObjectList = new ArrayList<MyObject>();
...
List<String> spList = myObjectList.stream().map(mo -> mo.getSo().getSp()).collect(Collectors.toList());