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