public class User {
String user_name;
String user_id;
Integer value1;
Integer value2;
}
// List 사용
List<User> userList = new ArrayList<>();
userList.add(new User("김씨", "Kim", 80, 50));
userList.add(new User("이씨", "Lee", 70, 60));
userList.add(new User("박씨", "Park", 60, 70));
// Stream 사용
Stream<User> userStream = userList.stream();
Stream.filter(변수 -> 조건문)
Collection
은 Stream
으로 변환해야 합니다.// List 사용
userList.stream()
.filter(object -> object.user_id.equals("Park") || object.user_id.equals("Lee"))
.forEach(object -> System.out.println(object.getUser_id()));
//Stream 사용
userStream
.filter(object -> object.user_id.equals("Park") || object.user_id.equals("Lee"))
.forEach(object -> System.out.println(object.getUser_id()));
Lee
Park
AND
조건이 됩니다.userList.stream()
.filter(object -> object.user_id.equals("Park") || object.user_id.equals("Lee"))
.filter(object -> object.value1 > 60)
.forEach(object -> System.out.println(object.getUser_id()));
Lee
Predicate
인터페이스를 Override
해서 조건을 만들 수 있습니다. userList.stream()
.filter(new Predicate<User>() {
@Override
public boolean test(User user) {
if(user.user_id.equals("Park") || user.user_id.equals("Lee")) {
if(user.value1 > 60) return true;
else return false;
} else return false;
}
})
.forEach(object -> System.out.println(object.getUser_id()));
Lee
Stream.map(변수 -> 대체변수)
User
Stream을 user_name
Stream으로 변환합니다.userList.stream()
.map(user -> user.getUser_name())
.forEach(user_name -> System.out.println(user_name));
// 람다식 사용
userList.stream()
.map(user::getUser_name)
.forEach(user_name -> System.out.println(user_name));
김씨
이씨
박씨
Function
인터페이스를 Override
해서 반환조건을 만들 수 있습니다.User
에서 user_name
만 수정해서 반환하는 예제입니다.userList.stream()
.map(new Function<User, Object>() {
@Override
public Object apply(User user) {
user.setUser_name(user.getUser_name().substring(0, 1));
return user;
}
})
.forEach(object -> System.out.println(object));
User(user_name=김, user_id=Kim, value1=80, value2=50)
User(user_name=이, user_id=Lee, value1=70, value2=60)
User(user_name=박, user_id=Park, value1=60, value2=70)
Stream.sorted()
userList
를 String List
로 변환 후 정렬합니다.userList.stream()
.map(User::getUser_name)
.sorted()
.forEach(getUser_name -> System.out.println(getUser_name));
김씨
박씨
이씨
Comparator
인터페이스를 Override
해서 정렬조건을 만들 수 있습니다.userList.stream()
.sorted(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
// 내림차순 ( 오름차순은 o1, o2 반대로)
return o2.getValue2() - o1.getValue2();
}
})
.forEach(object -> System.out.println(object));
User(user_name=박씨, user_id=Park, value1=60, value2=70)
User(user_name=이씨, user_id=Lee, value1=70, value2=60)
User(user_name=김씨, user_id=Kim, value1=80, value2=50)
Stream.collect(Collectors.Collection반환메소드)
결과를 Collection으로 반환해줍니다.
Example 1.
Stream
을 List
로 변환합니다.List<User> newList =
userStream.collect(Collectors.toList());
Stream
을 Map
로 변환합니다.Map
의 키가 동일한 경우를 위해 (oldValue, newValue) -> newValue
를 사용해줍니다.Map<Integer, String> newMap =
userStream.collect(
Collectors.toMap(
User::getValue2
, User::getUser_name
, (oldValue, newValue) -> newValue)
);