책으로만 그리고 강의로만 람다를 배우다보니 뭔가 내것이 되는것같지 않아서 직접 아주 작은 프로젝트를 해보려고 한다. 구글링 하면서 찾아낸 대표적인 프로젝트를 해보려 한다.
프로젝트 제목 : 자바 스트림 API와 람다 표현식을 활용한 데이터 처리
프로젝트 목적 : 자바의 스트림 API와 람다 표현식을 사용하여 효율적인 데이터 처리 방법을 익히려 함, 축구 선수들의 리스트를 사용하여 필터링, 매핑, 평균 구하기 등등 스트림 연산을 해보고 이 과정에서 람다 표현식을 숙달하려 함.
사용된 기술 : Java17, JDK17
public class User {
private String name;
private int age;
private String country;
// 생성자
public User(String name, int age, String country) {
this.name = name;
this.age = age;
this.country = country;
}
// Getter와 Setter 메서드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public class StreamApiExample {
public static void main(String[] args) {
List<User> users = Arrays.asList(
// 사용자 객체 생성
new User("손흥민", 31, "대한민국"),
new User("메시", 36, "아르헨티나"),
new User("호날두", 38, "포르투갈"),
new User("음바페", 24, "프랑스"),
new User("홀란드", 23, "노르웨이"),
new User("티아고실바", 39, "브라질"),
new User("이강인", 22, "대한민국"),
new User("김민재", 27, "대한민국")
);
users.stream()
.forEach(user -> System.out.println(user.getName()));
users.stream()은 User 객체들의 리스트를 스트림으로 변환하는 코드이다.
그리고 forEach가 User객체의 name 속성을 출력해준다.
users.stream()
.filter(user -> user.getCountry().equals("대한민국"))
.forEach(user -> System.out.println(user.getName()));
double averageAge = users.stream().mapToInt(User::getAge).average().orElse(0);
System.out.println("Average Age: " + averageAge);
이 외에도 만약 내가 선수이름을 영어로 했다면, 선수 이름을 대문자로 출력할 수도 있고 나이가 30이상인 사람들을 출력할 수도 있다.
워낙 다양하게 활용할 수 있어서 그때그때 필요한 상황에 따라 찾아보면서 람다식을 사용하면 될듯하다. 이상 끝!