本文目录导读:

我来介绍几种Java集合筛选的常用实现方法:
传统for循环筛选
import java.util.ArrayList;
import java.util.List;
public class TraditionalFilter {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i);
}
// 筛选大于5的数
List<Integer> filtered = new ArrayList<>();
for (Integer num : numbers) {
if (num > 5) {
filtered.add(num);
}
}
System.out.println("大于5的数: " + filtered);
}
}
Java 8 Stream API筛选
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamFilter {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");
// 筛选长度大于3的名字
List<String> filtered = names.stream()
.filter(name -> name.length() > 3)
.collect(Collectors.toList());
System.out.println("长度大于3的名字: " + filtered);
// 链式筛选:长度大于3且包含字母a
List<String> complexFilter = names.stream()
.filter(name -> name.length() > 3)
.filter(name -> name.contains("a") || name.contains("A"))
.collect(Collectors.toList());
System.out.println("复杂筛选结果: " + complexFilter);
}
}
对象筛选案例
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class Person {
private String name;
private int age;
private String city;
public Person(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
// getters
public String getName() { return name; }
public int getAge() { return age; }
public String getCity() { return city; }
@Override
public String toString() {
return name + "(" + age + "岁," + city + ")";
}
}
public class ObjectFilter {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("张三", 25, "北京"));
people.add(new Person("李四", 30, "上海"));
people.add(new Person("王五", 20, "北京"));
people.add(new Person("赵六", 35, "广州"));
people.add(new Person("孙七", 28, "上海"));
// 筛选出所有年龄大于25岁的人
List<Person> adults = people.stream()
.filter(p -> p.getAge() > 25)
.collect(Collectors.toList());
System.out.println("年龄大于25岁: " + adults);
// 筛选出所有北京的人
List<Person> beijingPeople = people.stream()
.filter(p -> "北京".equals(p.getCity()))
.collect(Collectors.toList());
System.out.println("北京人: " + beijingPeople);
// 多条件筛选:北京且年龄大于22岁
List<Person> complexFilter = people.stream()
.filter(p -> "北京".equals(p.getCity()) && p.getAge() > 22)
.collect(Collectors.toList());
System.out.println("北京且年龄>22: " + complexFilter);
}
}
使用CollectionUtils工具类
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Predicate;
import java.util.ArrayList;
import java.util.List;
public class CollectionUtilsFilter {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i);
}
// 使用Predicate筛选偶数
List<Integer> evens = new ArrayList<>(CollectionUtils.select(
numbers,
new Predicate<Integer>() {
@Override
public boolean evaluate(Integer n) {
return n % 2 == 0;
}
}
));
System.out.println("偶数: " + evens);
// 筛选大于5的数
List<Integer> greaterThan5 = new ArrayList<>(CollectionUtils.select(
numbers,
n -> n > 5
));
System.out.println("大于5: " + greaterThan5);
}
}
使用Google Guava
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Lists;
import java.util.Collection;
import java.util.List;
public class GuavaFilter {
public static void main(String[] args) {
List<String> cities = Lists.newArrayList("北京", "上海", "广州", "深圳", "杭州");
// 筛选包含"京"的城市
Collection<String> filtered = Collections2.filter(cities,
new Predicate<String>() {
@Override
public boolean apply(String city) {
return city.contains("京");
}
}
);
System.out.println("包含'京'的城市: " + filtered);
// Java 8 lambda表达式
Collection<String> filtered2 = Collections2.filter(cities,
city -> city.length() > 2
);
System.out.println("名称长度>2的城市: " + filtered2);
}
}
性能优化:并行流筛选
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class ParallelStreamFilter {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 1000000; i++) {
numbers.add(i);
}
// 使用并行流提高大数据量筛选性能
List<Integer> filtered = numbers.parallelStream()
.filter(n -> n > 500000)
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println("筛选结果数量: " + filtered.size());
}
}
自定义筛选方法
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
public class GenericFilter {
// 通用的筛选方法
public static <T> List<T> filter(List<T> list, Predicate<T> predicate) {
List<T> result = new ArrayList<>();
for (T item : list) {
if (predicate.test(item)) {
result.add(item);
}
}
return result;
}
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
numbers.add(i);
}
// 使用自定义筛选方法
List<Integer> evens = filter(numbers, n -> n % 2 == 0);
System.out.println("偶数: " + evens);
List<Integer> odds = filter(numbers, n -> n % 2 != 0);
System.out.println("奇数: " + odds);
}
}
推荐使用:对于Java 8及以上版本,Stream API是最简洁、最灵活的筛选方式,它支持链式操作、并行处理,代码可读性强。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播