Недавно я начал использовать библиотеку retrolambda для поддержки лямбда-выражений в разработке Android и получил следующее предупреждение от Android Studio:
Можно заменить колл-колл.
Эта проверка сообщает о циклах foreach, которые можно заменить вызовами потокового API.
Мой код выглядит следующим образом:
// mGeofenceList is a List<Geofence>
mGeofenceList = new ArrayList<>();
// GeofenceUtils.GeofenceObjects.entrySet() is a HashMap<String, LatLng>
for (Map.Entry<String, LatLng> entry : GeofenceUtils.GeofenceObjects.entrySet()) {
mGeofenceList.add(new Geofence.Builder()
.setRequestId(entry.getKey())
.setCircularRegion(
entry.getValue().latitude,
entry.getValue().longitude,
GeofenceUtils.GEOFENCE_RADIUS_IN_METERS)
.setExpirationDuration(GeofenceUtils.GEOFENCE_EXPIRATION_IN_MILLISECONDS)
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER |
Geofence.GEOFENCE_TRANSITION_EXIT)
.build());
}
Вопрос: Как я могу заменить его вызовом с оплатой?
ОБНОВЛЕНИЕ: когда я нажал alt+enter, он преобразовал код в следующий:
// method stream() cannot be found
mGeofenceList.addAll(GeofenceUtils.GeofenceObjects.entrySet().stream()
.map(entry -> new Geofence.Builder()
.setRequestId(entry.getKey())
.setCircularRegion(
entry.getValue().latitude,
entry.getValue().longitude,
GeofenceUtils.GEOFENCE_RADIUS_IN_METERS)
.setExpirationDuration(GeofenceUtils.GEOFENCE_EXPIRATION_IN_MILLISECONDS)
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER |
Geofence.GEOFENCE_TRANSITION_EXIT)
// Collectors cannot be found
.build()).collect(java.util.stream.Collectors.toList()));
И теперь он говорит, что не может разрешить метод stream(), Collectors. Это поправимо? Могу ли я добавить несколько операторов импорта? Или в настоящее время он не поддерживается Retrolambda?
ОБНОВЛЕНИЕ: РЕШЕНО, см. ответ ниже.