Использование предопределенной лямбды в качестве аргумента в Java

Итак, я пытаюсь пройти этот тест:

public void testCountWithCondition() {
        List<Integer> data = Arrays.asList(1, 3, 8, 4, 6);
        int count = streamer.count(data, x -> x % 3 == 0);
        assertEquals(2, count);
    }

Мне очень трудно понять, как создать метод count, который может принимать лямбда-выражение в качестве аргумента. Я видел другие сообщения, в которых говорилось, что вам нужно создать класс интерфейса, но как мне запрограммировать его, чтобы он мог принимать любое лямбда-выражение? Кроме того, в задании конкретно говорится, что мне нужно использовать потоки. Спасибо!

Что такое streamer? Это data.stream()?

Christoph Dahlen 26.11.2022 19:44

Вам не нужно делать новый интерфейс, вы можете использовать один из существующих. Посмотрите на определение Stream.filter.

Louis Wasserman 26.11.2022 19:47
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

ваш метод должен принимать предикат . все лямбды, которые принимают один аргумент и возвращают логическое значение, реализуют этот интерфейс. вызов предиката выполняется путем выполнения его метода test().

пример:

public <T> long count(Collection<T> collection, Predicate<T> filter) {
    return collection.stream()
            .filter(filter)
            .count();
}

Другие вопросы по теме