java8之匹配資料
阿新 • • 發佈:2018-12-01
從簡至繁闡述在開發中可能會用到的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);
};
}
下次再繼續梳理,上面的程式碼最後一個我自己都感動了,差點落淚。