java8之匹配数据

xiaoxiao2025-07-10  13

从简至繁阐述在开发中可能会用到的Java1.8中的技术,今天的这个例子是:当我们查询数据库的时候需要将列表List里面的数据进行筛选的时候,原始的操作方法,和新生方法的不同。

1.原始的代码 import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 将列表中符合条件的值抽取出来。 */ public class FunctionTest4 { public static void main(String[] args) { FunctionTest4 function = new FunctionTest4(); List<Person> lists = Arrays.asList(new Person("zhangsan",20) ,new Person("lisi",15),new Person("wangwu",30)); List<Person> listSource = function.getListByUserName("zhangsan",lists); for(int i = 0; i < listSource.size(); i++) { System.out.println(listSource.get(i).getUsername() + ", " + listSource.get(i).getAge()); } } /** * * @param userName 待匹配参数 * @param lists 源数据 * @return 与之匹配数据 * * 最原始的方法 */ public List<Person> getListByUserName(String userName,List<Person> lists) { List<Person> listOfRare = new ArrayList<>(); for(int i = 0; i < lists.size(); i++) { if(lists.get(i).getUsername().equals(userName)) { listOfRare.add(lists.get(i)); } } return listOfRare; } } 2.稍稍带有1.8的特性的代码,我们采用BiFunction import java.util.Arrays; import java.util.List; import java.util.function.BiFunction; import java.util.stream.Collectors; public class FunctionTest5 { public static void main(String[] args) { FunctionTest5 function = new FunctionTest5(); List<Person> lists = Arrays.asList(new Person("zhangsan",20) ,new Person("lisi",15),new Person("wangwu",30)); List<Person> listSource = function.getListByUsername("lisi",lists); /** 下面的遍历我们也用java8里面的ForEach吧,不然,写着太麻烦了*/ listSource.forEach(person -> System.out.println(person.getUsername()+", " + person.getAge())); } /** * * @param userName 待匹配参数 * @param lists 源数据 * @return 与之匹配数据 * 这个方法里面用到了Java1.8中的BiFunction函数,但是,并没有简化多少 */ public List<Person> getListByUsername(String userName, List<Person> lists) { BiFunction<String,List<Person>,List<Person>> biFunction = new BiFunction<String, List<Person>, List<Person>>() { @Override public List<Person> apply(String s, List<Person> personList) { return personList.stream().filter(person -> person.getUsername().equals(s)).collect(Collectors.toList()); } }; return biFunction.apply(userName,lists); } } 3.以java8新特性的方法进行操作 import java.util.Arrays; import java.util.List; import java.util.function.BiFunction; import java.util.stream.Collectors; public class FunctionTest6 { public static void main(String[] args) { FunctionTest6 function = new FunctionTest6(); List<Person> lists = Arrays.asList(new Person("zhangsan",20) ,new Person("lisi",15),new Person("wangwu",30)); List<Person> listSource = function.getListByUsername("wangwu",lists,(userName,personOfList)->{ return personOfList.stream().filter(person -> person.getUsername().equals(userName)).collect(Collectors.toList()); }); listSource.forEach(person -> System.out.println(person.getUsername() + ", " + person.getAge())); } /** * * @param userName 待匹配参数 * @param lists 源数据 * @param biFunction 操作函数 * @return 返回结果 * * 我认为方法就应该这样子去写。如何制定规则交给调用者,而不是制定者。 */ public List<Person> getListByUsername(String userName, List<Person> lists, BiFunction<String,List<Person>, List<Person>> biFunction) { return biFunction.apply(userName,lists); }; }

下次再继续梳理,上面的代码最后一个我自己都感动了,差点落泪。

转载请注明原文地址: https://www.6miu.com/read-5032837.html

最新回复(0)