Java의 스트림은 왜 한 번만 읽을 수 있는가?Java의 스트림이 한 번만 읽을 수 있는 이유는 스트림의 설계 방식과 데이터 처리 방법 때문이다. 스트림은 데이터를 한 방향으로 순차적으로 읽도록 설계되어 있으며, 한 번 읽은 데이터는 메모리에 저장되지 않기 때문에 다시 읽으려면 데이터를 재전송 받아야 한다. 이 방식은 스트림의 기본적인 동작 방식으로, 데이터를 처음부터 끝까지 한 번에 읽도록 설계되어 있다.이유 1: 데이터 소비스트림은 데이터를 한 번에 한 바이트씩 읽는다. 한 번 읽은 데이터는 소비되어 더 이상 스트림에 남아 있지 않게 된다. 이를 통해 메모리 사용을 최소화하면서 데이터를 처리할 수 있다.이유 2: 메모리 효율성스트림은 대량의 데이터를 메모리에 로드하지 않고 순차적으로 처리하기 때문에..
orElse와 orElseGet의 차이점은 기본값을 제공하는 방식과 시점에 있다.orElse방식: 기본값을 직접 인자로 받습니다.특징: orElse는 Optional이 비어있지 않더라도 기본값을 항상 생성합니다. 이는 기본값 생성이 비용이 많이 드는 경우 비효율적일 수 있습니다.T orElse(T other)예시:String result = Optional.ofNullable(someValue) .orElse(createDefaultValue()); // createDefaultValue()가 항상 호출됨orElseGet방식: 기본값을 생성하는 Supplier를 받습니다.특징: orElseGet은 Optional이 비어있을 때만 Supplier를 실행하여 기본값을..
✅ 이 글은 Optional을 잘 알고 있는 사람에게는 어울리지 않는 글입니다. 헷갈림을 유발할 수 있습니다. 오늘 Java의 Optional에 대해서 알게 된 점을 쓴다. 제목에 부끄럽지만을 썼지만 뺐다. Java8부터 나온 Optional 이 몇 년이나 지났지만 알고 있다고 사용한 부분에서 전혀 다른 결과가 나와서 순간 뭐지? 했다가 아차 싶어서 쓰는 글이다. 예제로 살펴본다.Optional 이란?Java8에서는 Optional 클래스를 사용해 NPE를 방지할 수 있도록 도와준다. Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. Optional 클래스는 아래와 같은 value에 값을 저장하기 때문에 값이 null이더라도 바..
문자열로 온 text 값을 LocalDateTime으로 parsing 해야 할 작업이 생겼다. 그런데 형식도 보통 yyyyMMddhhmmss 형식이 아니라 밀리세컨드까지 포함된 형식에 yyyy도 아닌 뒤에 yy만 들어오는 형태였다. Date: 120220 (20/2/2012) Time: 6150525 (6:15:05.250) 이렇게 들어온다.. 첫번째로 yyyy가 아닌 yy부터 날짜까지만 파싱이 되는지 확인해봤다. LocalDateTime yyMMddhhmmss = LocalDateTime.parse("220811165340", DateTimeFormatter.ofPattern("yyMMddHmmss")); System.out.println("yyMMddhhmmss = " + yyMMddhhmmss);..
필터링 Predicate로 필터링 스트림 인터페이스 중 filter 메서드는 Predicate(불리언을 반환하는 함수)를 인수로 받아서 Predicate와 일치하는 모든 요소를 포함하는 스트림을 반환한다. List vegetarianMenu = menu.stream() .filter(Dish::isVegetarian) //채식 요리인지 확인하는 메서드 참조 .collect(toList()); 고유 요소 필터링 스트림은 고유 요소로 이루어진 스트림을 반환하는 distinct 메서드도 지원한다. List numbers = Arrays.asList(1, 2, 1, 3, 3, 2, 4); numbers.stream() .filter(i -> i%2 ==0) .distinct() .forEach(System.ou..
스트림이란 무엇인가? 스트림은 자바 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 일단 스트림이 데이터 컬렉션 반복을 멋지게 처리하는 기능이라고 생각하자. 스트림을 병렬로 처리할 수 도 있는데 이건 내가 잘 이해를 못하고 일하는 환경에서의 필요성을 아직은 잘 못느껴서 나중에 정리 기존 코드와 자바8 스트림을 활용한 코드를 비교 // JAVA8 이전 public static List getLowCaloricDishesNamesInJava7(List dishes) { List lowCaloricDishes = new ArrayList(); //가비지 변수 즉, 컨테이너 역할만 하는 중간변수이다. 오직 정렬 연산을 위해 필요한 변수 for (Dish d : ..
오버로딩을 할 때 Method Signature가 중요하다. Method Signature가 같다는 것은 name 과 parameter types가 같다는 것을 말한다. 메서드 시그니처에는 return type(리턴 타입)은 포함되지 않는다. 시그니처가 같은 메서드는 동시에 한 클래스안에서 정의할 수 없다. 시그니처가 다른 메서드는 오버로딩이 가능하다. 이름이 다르거나 파라미터의 타입이나 개수가 다르거나.. public class MethodSignature { public static void main(String[] args) { } public String hello(int i) {return "";} public String hello(String s) {return "";} } hello 메서드..
pom.xml com.hierynomus smbj 0.10.0 Java @Value("${file.upload.server}") private String server; @Value("${file.upload.sharedFolder}") private String sharedFolder; @Value("${file.upload.user}") private String user; @Value("${file.upload.password}") private String pass; 업로드 public void smbFileUpload(){ .... SMBClient client = new SMBClient(); try (Connection connection = client.connect(address)) { ..
- Total
- Today
- Yesterday
- maven
- Github Status
- LocalDateTime
- k8s
- window
- elasticsearch
- mybatis config
- jQuery
- LocalDate
- Mac
- docker
- rocky
- mybatis
- intellij
- springboot
- config-location
- 오라클
- Spring Security
- 베리 심플
- svn
- Spring
- input
- Bash tab
- JavaScript
- oracle
- Java
- 북리뷰
- localtime
- Linux
- Kotlin
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |