java list filter 性能,java的List中使用filter過濾出符合特定條件的元素List

在實際開發中,經常需要把一個列表中的元素,按照特定條件過濾出來,放到一個新的列表中。本文給出了幾個例子,來描述解決這個問題的方法。

我們假設有一個書的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());

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值