java8 함수 프로그래밍 --BiFunction
@FunctionalInterface
public interface BiFunction {
/**
* Applies this function to the given arguments.
*
* @param t the first function argument
* @param u the second function argument
* @return the function result
*/
R apply(T t, U u);
/**
* Returns a composed function that first applies this function to
* its input, and then applies the {@code after} function to the result.
* If evaluation of either function throws an exception, it is relayed to
* the caller of the composed function.
*
* @param the type of output of the {@code after} function, and of the
* composed function
* @param after the function to apply after this function is applied
* @return a composed function that first applies this function and then
* applies the {@code after} function
* @throws NullPointerException if after is null
*/
default BiFunction andThen(Function super R, ? extends V> after) {
Objects.requireNonNull(after);
return (T t, U u) -> after.apply(apply(t, u));
}
}
예:
public class Student {
String name;
Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public static Student build(String name,Integer age,BiFunction biFunction){
return biFunction.apply(name,age);
}
}
public class ClassRoom {
List studentList ;
public ClassRoom() {
studentList = new ArrayList<>();
Student s1 = new Student();
s1.setAge(10);
s1.setName("s1");
Student s2 = new Student();
s2.setAge(11);
s2.setName("s2");
studentList.add(s1);
studentList.add(s2);
}
/**
*
* @param age
* @param students
* @param biFunction
* @return
*/
public List findStudentByAge(Integer age, List students, BiFunction,List> biFunction){
return biFunction.apply(age,students);
}
public List getStudentList() {
return studentList;
}
public void setStudentList(List studentList) {
this.studentList = studentList;
}
public Integer getStudentAgeByName(){
if(CollectionUtils.isEmpty(studentList)){
return null;
}
studentList.sort(Comparator.comparing(Student::getAge).reversed());
return studentList.get(0).getAge();
}
}
@Test
public void biFunctionTest(){
ClassRoom classRoom = new ClassRoom();
List resultList = classRoom.findStudentByAge(10,classRoom.getStudentList(),(age, list)->
list.stream().filter(student -> student.getAge()<=age).collect(Collectors.toList())
);
System.out.println(JSON.toJSONString(resultList)); //[{"age":10,"name":"s1"}]
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.