Java - найти элемент в массиве с использованием условия и лямбда
Короче, у меня есть этот код, и я хотел бы получить конкретный элемент массива, используя условие и лямбду. Код будет примерно таким:
Preset[] presets = presetDALC.getList();
Preset preset = Arrays.stream(presets).select(x -> x.getName().equals("MyString"));
Но, очевидно, это не сработает. В С# будет что-то подобное, но на Java, как это сделать?
Ответы
Ответ 1
Вы можете сделать это так,
Optional<Preset> optional = Arrays.stream(presets)
.filter(x -> "MyString".equals(x.getName()))
.findFirst();
if(optional.isPresent()) {//Check whether optional has element you are looking for
Preset p = optional.get();//get it from optional
}
Вы можете узнать больше о Optional
здесь.
Ответ 2
Вот так:
Optional<Preset> preset = Arrays
.stream(presets)
.filter(x -> x.getName().equals("MyString"))
.findFirst();
Это вернет Optional
, который может содержать или не содержать значение. Если вы хотите полностью избавиться от Optional
:
Preset preset = Arrays
.stream(presets)
.filter(x -> x.getName().equals("MyString"))
.findFirst()
.orElse(null);
Операция filter()
представляет собой промежуточную операцию, которая возвращает ленивый поток, поэтому нет необходимости беспокоиться о том, что весь массив фильтруется даже после того, как встречается встреча.
Ответ 3
Вы хотите, чтобы первое совпадение или все соответствия?
String[] presets = {"A", "B", "C", "D", "CA"};
// Find all matching
List<String> resultList = Arrays.stream(presets)
.filter(x -> x.startsWith("C"))
.collect(Collectors.toList());
System.out.println(resultList);
// Find first matching
String firstResult = Arrays.stream(presets)
.filter(x -> x.startsWith("C"))
.findFirst()
.orElse(null);
System.out.println(firstResult);
Выход
[C, CA]
C