2022.01.08
public String cleanNames(List<string> listofNames) {
StringBuilder result = new StringBuilder();
for(int i=0; i< listOfNames.size(); i++) {
if (listOfNames.get(i).length() > 1){
result.append(capitalizeString(listofNames.get(i))).append(",");
}
}
}
public String capitalizeString(String s) {
return s.substring(0, 1).toUpperCase() + s.substring(1, s.length());
}
var employees = List("neal", "s", "stu", "j", "rich")
var result = employees
.filter(_.length() > 1)
.map(_.capitalize)
.reduce(_ + "," + _)
결과가 변하지 않는 한, 작업 순서를 바꾸면 더 능률적이 된다. ( 처리할 아이템이 적어질 수 있으므로. )
public String cleanNamesP(List<String> names) {
if (names == null) return "";
return names
.parallelStream()
.filter(n -> n.length() > 1)
.map(e -> capitalize(e))
.collect(Collectors.joining(","))
}
위와 같이 컬렉션 변형을 간단히 병렬처리로 바꿔주는 대체 함수들이 있다. 높은 추상 수준에서 코딩 작업을 하고, 저수준의 세부적인 최적화는 런타임이 담당하게 하면 된다.
OOP 언어는 캡슐화를 이점으로 사용하기 때문에 객체지향적인 세계에서는 내부 상태의 사용이 보편적이며 권장된다. 상태를 분리해놓으면 값을 삽입할 수가 있기 때문에 단위 테스팅 같은 엔지니이링이 쉬워진다.
모든 메서드가 public static 스코프를 가지며 순수함수로 이루어져 있기 때문에 메서드를 숨길 이유가 없다.
자바 8에 더해진 최고의 기능은 람다 블록과 고계함수다.
함수형 언어에서 스트림은 나중에 사용하기 위해 저장해두는 위치에너지와 같다. 스트림은 개발자가 종료 작업을 통해 값을 요구할 때까지는 위치에너지를 운동에너지로 변환하지 않는다.
스트림은 매개변수로 주고받을 수 있으며, 종료가 되기 전까지는 다른 조건을 덧붙일 수도 있다. 이것이 바로 게으른 평가이다.
함수형 자바는 자바 1.5 이후 버전에 무리 없이 함수형 표현을 추가하려는 목적으로 만들어진 오픈소스 프레임워크다.
함수형 자바와 이전 버전의 차이가 단순히 문법 설탕이라고 생각할 수 있지만, 문법적 편리함은 중요하다.
한 언어로 아이디어를 표현하는 방식이 곧 문법이기 때문이다.
구체성은 고계함수에 매개변수로 주어지는 함수 통해 덧붙여진다.
움직이는 부분
사이의 상호작용에 대한 규칙이 많지 않고, 따라서 개발자의 작업을 쉽게 해준다.필터 함수로 컬렉션에 불리언 조건을 명시할 수 있다. 이 함수는 조건을 만족시키는 요소로 이루어진 컬렉션의 부분집합을 리턴한다.
모든 함수형 언어에서 볼 수 있는 주요 변형 함수는 맵이다. 맵 함수는 함수와 컬렉션을 받아서 이 함수를 각 요소에 적용한 후 컬렉션을 리턴한다.