【055】java的List中使用filter过滤出符合特定条件的元素List

您所在的位置:网站首页 查找符合条件的数据的方法 【055】java的List中使用filter过滤出符合特定条件的元素List

【055】java的List中使用filter过滤出符合特定条件的元素List

2024-07-09 14:33| 来源: 网络整理| 查看: 265

在实际开发中,经常需要把一个列表中的元素,按照特定条件过滤出来,放到一个新的列表中。本文给出了几个例子,来描述解决这个问题的方法。 我们假设有一个书的List,需要找出其中id分别是3、6、8、9的书。本文介绍了两种方法来完成这个工作。第一种方法是使用java8支持的lambda表达式,代码简洁但是仅能用在java8版本上。第二种方法使用了传统的方式,可以用在java的旧版本上。

书的实体类:

package blog.zhangchao.csdnBlog; /** * 书 * @author zhangchao * */ public class Book { private String id; private String name; public Book(String id, String name) { super(); this.id = id; this.name = name; } public Book() { super(); } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 方法一

如果使用java8,可以用lambda表达式:

package blog.zhangchao.csdnBlog; import java.util.List; import java.util.stream.Collectors; import java.util.ArrayList; /** * java8的例子,使用lambda表达式 * @author zhangchao * */ public class Test { /** * 准备书的列表数据 * @return */ public static List prepareData() { // 准备书的列表,id是从1到10 List bookList = new ArrayList(); for (int i = 1; i < 11; i++) { bookList.add(new Book(String.valueOf(i), "book"+i)); } return bookList; } public static void main(String[] args) { List bookList = prepareData(); // 要被找出的书的ID ArrayList ids = new ArrayList(); ids.add("3"); ids.add("6"); ids.add("8"); ids.add("9"); // 存放过滤结果的列表 List result = null; // 使用lambda表达式过滤出结果并放到result列表里,written by zhangchao result = bookList.stream() .filter((Book b) -> ids.contains(b.getId())) .collect(Collectors.toList()); // 打印结果列表 if (result != null && !result.isEmpty()) { result.forEach((Book b) -> System.out.println(b.getId() + " " + b.getName())); } } } 方法二

如果java版本低于8,那么可以用下面ListUtils这个工具类:

接口ListUtilsHook,它是ListUtils的函数钩子。

package blog.zhangchao.csdnBlog; /** * 用来给ListUtils做函数钩子的接口。 * @author zhangchao * */ public interface ListUtilsHook { public boolean test(T t); }

ListUtils:

package blog.zhangchao.csdnBlog; import java.util.ArrayList; import java.util.List; /** * 使用到java8以下的版本,避免低版本的java不支持lambda表达式 * @author zhangchao * */ public final class ListUtils { public static List filter(List list, ListUtilsHook hook) { ArrayList r = new ArrayList(); for (T t : list) { if (hook.test(t)) { r.add(t); } } r.trimToSize(); return r; } }

使用方式:

package blog.zhangchao.csdnBlog; import java.util.ArrayList; import java.util.List; /** * 版本在java8以下的情况下,过滤元素的例子 * @author zhangchao * */ public class Test2 { /** * 准备书的列表数据 * @return */ public static List prepareData() { // 准备书的列表,id是从1到10 List bookList = new ArrayList(); for (int i = 1; i < 11; i++) { bookList.add(new Book(String.valueOf(i), "book"+i)); } return bookList; } public static void main(String[] args) { List bookList = prepareData(); // 要被找出的书的ID ArrayList ids = new ArrayList(); ids.add("3"); ids.add("6"); ids.add("8"); ids.add("9"); // 存放过滤结果的列表 List result = null; result = ListUtils.filter(bookList, new ListUtilsHook(){ @Override public boolean test(Book b) { return ids.contains(b.getId()); } }); // 打印结果列表 if (result != null && !result.isEmpty()) { for (Book b : result) { System.out.println(b.getId() + " " + b.getName()); } } } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3