최근 자바에서도 함수형 프로그래밍을 지원하면서 반복문보다 더 나은 대안책이 생김
반복문을 파이프라인으로 바꾸기(Replace Loop with Pipeline)
- 컬렉션 파이프라인(자바 Stream)
- 고전적인 반복문을 파이프라인 오퍼레이션을 사용해 표현하여 코드를 더 명확하게 함
- 필터(filter): 전달받은 조건의 true 에 해당하는 데이터만 다음 오퍼레이션으로 전달
- 맵(map): 전달받은 함수를 사용해 입력값을 원하는 출력값으로 변한하여 다음 오퍼레이션으로 전달
before
class Refactoring {
private String company;
private String twitterHandle;
public Author(String company, String twitterHandle) {
this.company = company;
this.twitterHandle = twitterHandle;
}
static public List<String> TwitterHandles(List<Author> authors, String company) {
var result = new ArrayList<String> ();
for (Author a : authors) {
if (a.company.equals(company)) {
var handle = a.twitterHandle;
if (handle != null)
result.add(handle);
}
}
return result;
}
}
after
class Refactoring {
static public List<String> TwitterHandles(List<Author> authors, String company) {
return authors.stream()
.filter(author -> author.company.equals(company))
.map(author -> author.twitterHandle)
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
}