java8之匹配数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27416233/article/details/83378887

从简至繁阐述在开发中可能会用到的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);
	    };
	}

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

猜你喜欢

转载自blog.csdn.net/qq_27416233/article/details/83378887