반응형
lambda 의 stream 을 이용해 데이터에 접근, 찾으면 리턴하도록 한다.
public static void main(String[] args) {
Map<String, Object> map1 = new HashMap<>();
Map<String, Object> map2 = new HashMap<>();
Map<String, Object> map3 = new HashMap<>();
Map<String, Object> map4 = new HashMap<>();
map1.put("name", "네이버");
map1.put("date", "2019-01-01");
map2.put("name", "카카오");
map2.put("date", "2019-04-01");
map3.put("name", "구글");
map3.put("date", "2019-03-01");
map4.put("name", "페이스북");
map4.put("date", "2019-02-01");
List<Map> list = new LinkedList<>();
list.add(map1);
list.add(map2);
list.add(map3);
list.add(map4);
System.out.println(list);
String searchText = "구글";
Map result = list.stream().filter(x -> x.get("name").equals(searchText)).findAny().get();
System.out.println(result);
}
결과
[{date=2019-01-01, name=네이버}, {date=2019-04-01, name=카카오}, {date=2019-03-01, name=구글}, {date=2019-02-01, name=페이스북}]
{date=2019-03-01, name=구글}
findAny() 를 사용하면 Optional 형태로 리턴된다.
때문에 .get()을 호출해야 가진 유형으로 리턴해준다.
그런데 만약 값이 없다면 Exception이 발생한다
String searchText = "테스트";
Map result = list.stream().filter(x -> x.get("name").equals(searchText)).findFirst().get();
System.out.println(result);
결과
Exception in thread "main" java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.get(Optional.java:148)
at com.main.TestClass.main(TestClass.java:60)
때문에 마지막에 get() 은 반드시 있다는 가정하에 호출해야 하고, 만약 명확하지 않다면 다음과 같은 방식으로 처리한다
String searchText = "테스트";
Optional result = list.stream().filter(x -> x.get("name").equals(searchText)).findFirst();
System.out.println(result);
if (result.isPresent() == true) {
System.out.println(result.get());
} else {
System.out.println("데이터 없습니다 => " + searchText);
}
결과
[{date=2019-01-01, name=네이버}, {date=2019-04-01, name=카카오}, {date=2019-03-01, name=구글}, {date=2019-02-01, name=페이스북}]
Optional.empty
데이터 없습니다 => 테스트
반응형
'공부 > 프로그래밍' 카테고리의 다른 글
[java] 빌더 패턴(Builder Pattern) 주의점과 사용이유 (0) | 2019.10.18 |
---|---|
[intellij] mybatis autowired mapper 빨간불 없애기 (0) | 2019.10.17 |
[java] List<map> 형태 정렬하기(lambda 이용) (0) | 2019.10.12 |
[Springboot] spring bean과 싱글톤(singleton) (0) | 2019.10.01 |
[jenkins] gitlab 과 jenkins webhook 으로 자동빌드 연결 (2) | 2019.09.25 |
댓글