public class Optional_1 {
public static void main(String[] args) {
String str1="떡볶이";
String str2=null;
// 객체를 Optional 상자에 넣기
Optional<String> op1 = Optional.of(str1); // null을 허용하지 않을 객체
Optional<String> op2 = Optional.ofNullable(str2); // null을 허용할 객체
if (op1.isPresent()) {
//isPresent() : 상자에 데이터가 존재하는지 확인
System.out.println(op1.get()); // get() : 상자의 데이터 읽기
}
if (op2.isPresent()) {
//isPresent() : 상자에 데이터가 존재하는지 확인
System.out.println(op2.get()); // get() : 상자의 데이터 읽기
}
}
}

public class Optional_2 {
public static void main(String[] args) {
Optional<String> op1=Optional.of("떡볶이");
Optional<String> op2=Optional.ofNullable(null);
// 데이터가 존재할 때 어떤 내용을 실행할지 작성하는 메서드
// ifPresent() 메서드의 매개변수 : Consumer<T>
// Consumer<T> -> void x(T t)
op1.ifPresent(str-> System.out.println(str));
op2.ifPresent(str-> System.out.println(str));
}
}
내용 실행 결과를 다시 Optional 상자에 담아서 리턴
public class Optional_3 {
public static void main(String[] args) {
Optional<String> op = Optional.of("Kim Bap");
// Function<T> -> R x(T t)
Optional<String> result1 = op.map((str)->str.toLowerCase());
System.out.println(result1.get());
String result2 = op.map(str->str.toLowerCase()).get();
// ------
Optional<String> op2=Optional.of("Kim Bap");
// 대문자로 바꾸고 . 공백을 공백 없는 걸로 교체
String result3=op2.map(str->str.toUpperCase()).map(str->str.replace(" ","")).get();
System.out.println(result3);
}
}

public class Optional_4 {
public static void main(String[] args) {
Optional<String> op=Optional.of("KimBap");
String result = op.map(s->s.toString()).orElse("empty data");
System.out.println(result);
}
}
public class Optional_5 {
public static void main(String[] args) {
MemberVO member=new MemberVO("고길동",43);
Optional<MemberVO> op1=Optional.of(member);
// 회원 정보가 null이 아니면 회원의 이름을 출력
if (member!=null){
System.out.println(member.getName());
}
op1.ifPresent(m-> System.out.println(m.getName()));
op1.ifPresentOrElse(
mem-> System.out.println(mem.getName())
, ()-> System.out.println("회원의 이름 정보가 없습니다.") );
}
}
public class BoardServiceImpl {
private List<BoardVO> boardList;
public BoardServiceImpl(){
boardList = new ArrayList<>();
boardList.add(new BoardVO(1,"첫번째 글"));
boardList.add(new BoardVO(2,"두번째 글"));
boardList.add(new BoardVO(3,"세번째 글"));
}
public Optional<List<BoardVO>> getBoardList(){
return Optional.ofNullable(boardList);
}
public Optional<BoardVO> getBoardDetail(int index){
return Optional.ofNullable(boardList.get(index));
}
}
public class BoardController {
private BoardServiceImpl boardService;
public BoardController(){
this.boardService=new BoardServiceImpl();
}
// 게시글 목록 데이터 조회
public Optional<List<BoardVO>> boardList(){
Optional<List<BoardVO>> optionalList=boardService.getBoardList();
// optionalList.ifPresentOrElse(()->{},()=>{});
return Optional.ofNullable(boardService.getBoardList().get());
}
// 게시글 상세 정보 조회
public BoardVO boardDetail(){
Optional<BoardVO> op=boardService.getBoardDetail(0);
op.ifPresentOrElse( member->{
System.out.println("게시글 제목 : " +member.getTitle());
} ,()->{
System.out.println("404 NOT FOUND");
});
return boardService.getBoardDetail(0).get();
}
}
public static void main(String[] args) {
ContactInfo contact = new ContactInfo("01011112222", "제주도");
Company c = new Company("삼성", contact);
Friends f = new Friends("고길동", c);
originPrint(f);
Optional<Friends> optional = Optional.ofNullable(f);
optionalPrint(optional);
}
public static void originPrint(Friends f){
String addr = null;
if (f!=null){
Company c=f.getCompany();
if (c!=null){
ContactInfo contact=c.getContactInfo();
if (contact!=null){
addr = contact.getAddr();
}
}
}
if (addr!=null){
System.out.println(addr);
}
else {
System.out.println("주소를 찾을 수 없습니다.");
}
}
public static void optionalPrint(Optional<Friends> optional){
// Function<T> -> R apply(T t)
String addr = optional.map(friends->friends.getCompany()) // Company 객체가 상자에 들어감
.map(company -> company.getContactInfo()) // ContactInfo 객체가 상자에 들어감
.map(contactInfo -> contactInfo.getAddr()) // String addr 들어감
.orElse("주소를 찾을 수 없습니다.");
System.out.println(addr);
}
콘솔창

하나라도 null을 포함하게 될 시에는 이렇게 출력된다.
