У меня простая DataStructure
public class DataStructure {
private String key;
private String value;
//get, set
}
И мне нужно вернуть значение из `List 'на основе ключа, и я хочу сделать это Java8 способом, с потоками.Я думаю, что код говорит сам за себя:
public class Main {
public static void main(String args[]) {
List<DataStructure> dataList = new ArrayList<>();
dataList.add(new DataStructure("first", "123"));
dataList.add(new DataStructure("second", "456"));
System.out.println(findValueOldSchool(dataList, "third")); //works ok
System.out.println(findValueStream(dataList, "third")); //throws NoSuchElementException
}
static String findValueOldSchool(List<DataStructure> list, String key) {
for (DataStructure ds : list) {
if (key.equals(ds.getKey())) {
return ds.getValue();
}
}
return null;
}
static String findValueStream(List<DataStructure> list, String key) {
return list.stream()
.filter(ds -> key.equals(ds.getKey()))
.findFirst()
.get().getValue();
}
}
Как я могу изменить findValueStream()
, чтобы не выбрасывать исключение NoSuchValueException при поиске несуществующего ключа?Я не хочу возвращать Optional<String>
, потому что этот метод уже используется во многих местах проекта.И, конечно же, я пробовал map
, ifPresent
, anyMatch
, просто не могу найти правильный способ сделать это.