我想将结果值分配给我的列表变量,但lambda中的变量必须是final,如果是final,则它不能接收值。
public List<PersonalInfo> getAllPatient() {
List<PersonalInfo> mPersonalInfoList;
AppDatabase db = AppDatabase.getAppDatabase(mContext);
db.patientDao().getAll()
.flatMapIterable(patientlist -> {
List<PersonalInfo> personalInfoList = new ArrayList<>();
for (PersonalInfo p: patientlist) {
p.setColor(getRandomMaterialColor("400"));
personalInfoList.add(p);
}
return personalInfoList;
})
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result ->
// error
mPersonalInfoList =result
);
return mPersonalInfoList;
}
答案 0 :(得分:0)
问题是您的方法在将值分配给变量之前返回。您可以通过锁定解决此问题。
试试这个:
public void onMarkerDrag(Marker marker) {
AlertUtils.showLog("marker", "onMarkerDrag" + " marker id : " + marker.getTitle());
if (arrayListPolygonData.size() > 1) {
//step 1
for (int i = 0; i < arrayListPolygonData.size(); i++) {
MapPolygonData mapData = arrayListPolygonData.get(i);
AlertUtils.showLog("marker", "mapData" + " marker id : " + mapData.id);
if (marker.getSnippet().equals(mapData.id)) {
mapData.latitude = marker.getPosition().latitude;
mapData.longitude = marker.getPosition().longitude;
mapData.latLng = marker.getPosition();
arrayListPolygonData.set(i, mapData);
break;
}
}
//step 2
polygonOptions = new PolygonOptions();
for (int i = 0; i < arrayListPolygonData.size(); i++) {
MapPolygonData mapData = arrayListPolygonData.get(i);
LatLng latLng = mapData.latLng;
arrayListLatLngs.add(mapData.latLng);
if (polygon != null)
polygon.remove();
polygonOptions.add(latLng);
polygonOptions.strokeColor(Color.RED);
polygonOptions.fillColor(Color.parseColor("#40000000"));
polygon = map.addPolygon(polygonOptions);
}
}
}
答案 1 :(得分:-1)
您可以将本地变量转换为类成员,它应该可以解决您的问题。
答案 2 :(得分:-1)
那么,在您的情况下,您可以初始化mPersonalInfoList,而不是分配您的结果,将其添加到mPersonalInfoList。
所以:
final List<PersonalInfo> mPersonalInfoList = new ArrayList<>();
...
.subscribe(result ->
mPersonalInfoList.addAll(result);
);