Узнайте, как найти первый элемент коллекции, который соответствует условию в Java, с помощью Коллекции Eclipse.

Обнаружение / обнаружение с помощью

Используйте detect, чтобы найти первый элемент коллекции, соответствующий заданному Predicate. Используйте detectWith, чтобы найти первый элемент коллекции, который соответствует заданному Predicate2 с дополнительным параметром. Метод detectWith хорошо работает со ссылками на методы. Если соответствующий элемент не найден, возвращается null.

MutableList<String> rainbow = Lists.mutable.with(
        "Red", "Orange", "Yellow", "Green",
        "Blue", "Indigo", "Violet");
String red = rainbow.detect(each -> each.startsWith("R"));
Assert.assertEquals("Red", red);

String red2 = rainbow.detectWith(String::startsWith, "R");
Assert.assertEquals("Red", red2);

Assert.assertNull(rainbow.detect(each -> each.startsWith("T")));

Assert.assertNull(rainbow.detectWith(String::startsWith, "T"));

DetectIfNone / DetectWithIfNone

Используйте detectIfNone, чтобы найти первый элемент коллекции, который соответствует заданному Predicate . Если совпадения нет, возвращает результат оценки заданного Function0. Метод detectWithIfNone похож на detectWith, а также хорошо работает со ссылками на методы.

String violetIfNone =
        rainbow.detectIfNone(
                each -> each.startsWith("T"),
                () -> "Violet");
Assert.assertEquals("Violet", violetIfNone);

String violetIfNone2 =
        rainbow.detectWithIfNone(
                String::startsWith,
                "T",
                () -> "Violet");
Assert.assertEquals("Violet", violetIfNone2);

DetectOptional / DetectWithOptional

Метод detectOptional эквивалентен filter().findFirst() на Java Stream. Этот метод вернет Optional, который можно запросить, чтобы определить, соответствует ли какой-либо элемент заданному Predicate. Метод detectWithOptional похож на detectWith и одинаково хорошо работает со ссылками на методы.

Optional<String> violetOptional =
        rainbow.detectOptional(each -> each.startsWith("T"));
Assert.assertEquals("Violet", violetOptional.orElse("Violet"));

Optional<String> violetOptional2 =
        rainbow.detectWithOptional(String::startsWith, "T");
Assert.assertEquals("Violet", violetOptional2.orElse("Violet"));

API, рассмотренные в примерах

  1. detect / detectWith - находит первый элемент коллекции, соответствующий заданному Predicate или Predicate2. Если совпадений нет, возвращается null.
  2. detectIfNone / detectWithIfNone - находит первый элемент коллекции, соответствующий заданному Predicate или Predicate2. Если совпадений нет, возвращается результат оценки заданного Function0.
  3. detectOptional / detectWithOptional - находит первый элемент коллекции, соответствующий заданному Predicate или Predicate2. Результатом вызова будет Optional, который можно запросить, чтобы определить, было ли совпадение успешным.

Ознакомьтесь с этой презентацией, чтобы узнать больше о происхождении, дизайне и эволюции Eclipse Collections API.

Я руководитель проекта и ответственный за проект OSS Коллекции Eclipse в Eclipse Foundation. Eclipse Collections открыта для пожертвований. Если вам нравится библиотека, вы можете сообщить нам об этом, отметив ее на GitHub.