您的位置:

.stream().filter详解

一、stream filter过滤


List<Integer> numberList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

List<Integer> evenNumbersList = numberList.stream()
                                        .filter(n -> n % 2 == 0)
                                        .collect(Collectors.toList());

System.out.println(evenNumbersList); //[2, 4, 6, 8, 10]

我们首先创建了一个包含1~10的整数列表(numberList),然后使用.stream()将其转换为一个Stream对象。接着,我们使用.filter()方法过滤出列表中的偶数,并将结果存储在一个新的列表(evenNumbersList)中,最后使用.collect()方法将结果转换回List类型。

可以看到,Stream和Lambda表达式的结合使用,可以更加高效和简洁地实现数据的过滤。

二、stream filter map


List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Emily");

List<String> upperCaseNames = names.stream()
                                      .filter(name -> name.startsWith("A"))
                                      .map(String::toUpperCase)
                                      .collect(Collectors.toList());

System.out.println(upperCaseNames); //[ALICE]

这里我们定义了一个包含多个字符串的列表(names),然后使用.filter()方法过滤出以“A”开头的字符串,并使用.map()方法将其转换为大写字母。最终我们得到一个只包含“ALICE”的List。

在这个例子中,使用map()方法返回的结果类型被显式地指定为String类型。

三、stream流的filter


Stream<String> namesStream = Stream.of("Alice", "Bob", "Charlie", "David", "Emily");

Stream<String> upperCaseNamesStream = namesStream.filter(name -> name.startsWith("A"))
                                                   .map(String::toUpperCase);

System.out.println(upperCaseNamesStream.collect(Collectors.toList())); //[ALICE]

这个例子中,我们使用Stream.of()方法创建了一个包含多个字符串的流(namesStream)。同样地,使用.filter()方法过滤出以“A”开头的字符串,并使用.map()方法将其转换为大写字母。最终,使用collect()方法将结果转换为List类型。需要注意的是,流只能被消费一次,如果我们尝试在上面的代码中打印upperCaseNamesStream,将会得到一个空的列表。

四、stream的filter方法详解


Stream<Integer> numberStream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8);

Stream<Integer> evenNumbersStream = numberStream.filter(n -> n % 2 == 0);

evenNumbersStream.forEach(n -> System.out.print(n + " ")); //2 4 6 8

在这个例子中,我们使用Stream.of()方法创建了一个包含多个数字的流(numberStream)。然后,我们使用.filter()方法过滤出偶数,并使用.forEach()方法将其打印出来。

需要注意的是,我们没有将结果存储在一个列表中,而是直接将其打印出来。因为Stream是惰性求值的,只有在终止操作(如forEach())被触发时才会执行中间操作(如filter())。

五、list的filter方法


List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Emily");

List<String> filteredNames = names.stream()
                                     .filter(name -> name.length() <= 4)
                                     .collect(Collectors.toList());

System.out.println(filteredNames); //[Bob, David, Emily]

这个例子中,我们定义了一个包含多个字符串的列表(names)。使用.stream()方法将其转换为一个Stream对象,接着,使用.filter()方法过滤出长度小于或等于4的字符串,并使用.collect()方法将结果转换为一个新的List对象。

六、stream filter 用法


List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Emily");

Predicate<String> startsWithAPredicate = name -> name.startsWith("A");
Predicate<String> lengthLessThanFivePredicate = name -> name.length() < 5;

List<String> filteredNamesWithPredicates = names.stream()
                                                   .filter(startsWithAPredicate.and(lengthLessThanFivePredicate))
                                                   .collect(Collectors.toList());

System.out.println(filteredNamesWithPredicates); //[Alice]

这个例子中,我们首先定义了两个Predicate对象(startsWithAPredicate和lengthLessThanFivePredicate),分别用于判断字符串是否以“A”开头和长度是否小于5。接着使用.filter()方法将这两个Predicate组合起来,过滤出符合条件的字符串,并使用.collect()方法将结果转换为一个新的List对象。

七、list stream过滤


List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);

List<Integer> evenNumbers = numbers.stream()
                                        .filter(n -> n % 2 == 0)
                                        .collect(Collectors.toList());

System.out.println(evenNumbers); //[2, 4, 6, 8]

这个例子中,我们定义了一个包含多个整数的列表(numbers),然后使用.stream()将其转换为一个流对象,再使用.filter()方法过滤出偶数,并使用.collect()方法将结果转换为一个新的List对象。

八、list使用stream过滤数据


List<Person> persons = new ArrayList<>();

persons.add(new Person("Alice", "Female"));
persons.add(new Person("Bob", "Male"));
persons.add(new Person("Charlie", "Male"));
persons.add(new Person("David", "Male"));
persons.add(new Person("Emily", "Female"));

List<Person> females = persons.stream()
                                   .filter(p -> p.getGender().equals("Female"))
                                   .collect(Collectors.toList());

System.out.println(females); //[Person{name='Alice', gender='Female'}, Person{name='Emily', gender='Female'}]

这个例子中,我们首先定义了一个包含多个Person对象的列表(persons)。其中,每一个Person对象包含一个姓名(name)和性别(gender)。我们使用.stream()方法将其转换为一个流对象,接着使用.filter()方法过滤出性别为“Female”的Person对象,并使用.collect()方法将结果转换为一个新的List对象。