使用 java、java 8、guava 和 apache commons实现列表元素查找

x33g5p2x  于2022-09-16 转载在 Java  
字(1.6k)|赞(0)|评价(0)|浏览(280)

此示例将使用 java、java 8、guava 和 apache commons实现列表元素查找。

原生Java

使用标准 for 循环遍历集合,if 语句将检查匹配元素 3。如果找到匹配项,则将设置 value 变量。

@Test
public void find_elements_in_list_with_java () {

    List <Integer> numbers = Lists.newArrayList(
            new Integer(1),
            new Integer(2),
            new Integer(3));

    Integer value = null;
    for (Integer number : numbers) {
        if (number == 3) {
            value = number;
        }
    }
    assertEquals(new Integer(3), value);
}

Java 8

使用 Java 8,此代码段将找到数组列表中的第一个元素。 Java 8 Streams API 包含 Stream.Filter ,它将返回与谓词匹配的元素。通过 lambda 表达式传递一个 java predicate,流将过滤任何匹配值 3 的元素。如果任何元素匹配 Stream.findFirst 将返回一个描述该元素的 java Optional。如果没有元素匹配,则将返回一个空的可选项。

@Test
public void find_elements_in_list_with_java8_lambda () {

    List <Integer> numbers = Lists.newArrayList(
            new Integer(1),
            new Integer(2),
            new Integer(3));

    Optional<Integer> value = numbers
            .stream()
            .filter(a -> a == 3)
            .findFirst();

    assertEquals(new Integer(3), value.get());
}

Google Guava

此代码段将展示如何使用 guava 查找数组列表中的第一个元素。 Guava 的 Iterables.find 将返回匹配提供的 guava predicate等于 3 的第一个元素。

@Test
public void find_elements_in_lists_with_guava () {

    List <Integer> numbers = Lists.newArrayList(
            new Integer(1),
            new Integer(2),
            new Integer(3));

    Integer value = Iterables.find(numbers, new Predicate<Integer> () {
        public boolean apply(Integer number) {
            return number == 3 ;
        }
    });

    assertEquals(new Integer(3), value);
}

Apache Commons

与上面的示例类似,此代码段将使用 apache commons 通过将 apache predicate传递给 CollectionUtils.find 方法来查找集合中的第一个元素。

@Test
public void find_elements_in_list_with_apachecommons () {

    List <Integer> numbers = Lists.newArrayList(
            new Integer(1),
            new Integer(2),
            new Integer(3));

    Integer value = (Integer) CollectionUtils.find(numbers, new org.apache.commons.collections.Predicate() {
        public boolean evaluate(Object number) {
            return ((Integer)number).intValue() == 3 ;
        }
    });

    assertEquals(new Integer(3), value);
}

相关文章

微信公众号

最新文章

更多