Можете ли вы помочь мне написать код с помощью API потоков Java 8?
SuperUser superUser = db.getSuperUser;
for (final Client client : superUser) {
if (cartData.getClient().equals(client.getUid())) {
client.setIsSelected(true);
break;
}
}
Спасибо за вашу помощь!




Как это закодировать с использованием потока Java 8:
SuperUser superUser = db.getSuperUser;
for (final Client client : superUser) {
if (cartData.getClient().equals(client.getUid())) {
client.setIsSelected(true);
break;
}
}
For-each не кажется подходящим инструментом для этой работы. Вы можете попробовать:
superUser.stream()
.filter(c -> cartData.getClient().equals(c.getUid()))
.findFirst().ifPresent(c -> c.setIsSelected(true));
В дополнение к другому ответу я хотел бы добавить, что вызов cartData.getClient() каждый раз в цикле неоптимален, а не кеширует его перед началом цикла, как показано ниже:
T tempClient = cartData.getClient(); // where T is the type returned by getClient()
Тогда вы сможете:
superUser.stream() // or Arrays.steam(superUser) if superUser is an array
.filter(c -> tempClient.equals(c.getUid()))
.findFirst()
.ifPresent(client -> client.setIsSelected(true));
или же:
superUser.stream() // or Arrays.steam(superUser) if superUser is an array
.filter(c -> tempClient.equals(c.getUid()))
.limit(1)
.forEach(client -> client.setIsSelected(true));
Конечно, приятель, извини за ошибку. Отличный ответ!
@Rann Lifshitz Спасибо за редактирование, но изменение его с «вместо кеширования ...» на «вместо кеширования ...» противоречит моему намерению. В настоящее время, с вашим редактированием, кажется, что OP - это уже, кэширующий ссылку на
cartData.getClient();перед циклом, что не так. вернет эту конкретную часть и оставит последующее изменение :)