我有python背景所以请允许我在python中使用我的代码。
在Java(Android)中有一个arrayList<customObject>
。在每个customObject
中对应一个布尔值(用于可见性)。
我希望尽可能高效地执行操作来检查可见性布尔值。在python中我会创建一个生成器。
假设我的架构是:
list = [{"item": customObject, "visible": boolean}, {...}, {...}]
visible_matches = [x for x in list if x['visible']]
for match in visible_matches:
dosomething(match)
或替代架构:
list = [[ customObject, boolean], [...], [...]]
visible_matches = [x for x in list if x[1]]
我怎样才能在Java中执行相同的操作?
arrayList<arrayList<boolean,customObject>>
或
arrayList< SimpleEntry<"item",customObject>, SimpleEntry<"visible",boolean> >
给我看一个非常脏的解决方案。有没有更简单的方法来实现这个目标?
答案 0 :(得分:1)
使用java.util.Map<CustomObject, Boolean>
将对象映射到可见状态。
编辑获取地图中的所有可见项目:
Map<CustomObject, Boolean> items = ...;
List<CustomObject> visibleItems = new ArrayList<CustomObject>();
for (Map.Entry<CustomObject, Boolean> entry : items.entrySet()) {visibleItems
CustomObject customObject = entry.getKey();
Boolean objectVisible = entry.getValue();
if (objectVisible) {
visibleItems.add(customObject);
}
}
我确实错过了Java中的闭包......
答案 1 :(得分:0)
Java没有与Python相同的生成器(迭代器不完全相同)。像在Python中一样动态创建自定义对象也不起作用。由于Java是强类型的,因此必须先定义自定义对象,然后才能使用它。 Python没有强类型。
在单独的文件中,尝试此启动代码。我命名为class MyCustomObject
,因为它位于MyCustomObject.java中。名字必须匹配。
public class MyCustomObject {
public boolean visible;
// Constructor
public MyCustomClass(boolean visible) {
this.visible = visible;
}
}
现在你有了一个自定义对象,你可以在主类中实例化和操作它。我打电话给我class Main
,因为它再次出现在Main.java中。
public class Main {
public static void main(String[] args) {
ArrayList<MyCustomObject> list = new ArrayList<>();
list.Add(new MyCustomObject(true));
list.Add(new MyCustomObject(false));
list.Add(new MyCustomObject(true));
list.Add(new MyCustomObject(true));
....
for (MyCustomObject potentialMatch: list) {
if(obj.visible)
doSomething(potentialMatch);
}
}
}