해당 게시글은 java의 stream을 이용하여 데이터를 쉽게 가공할 수 있는 방법을 정리 해놓은 문서로
유용한 케이스를 발견할 때마다 계속 업데이트할 예정입니다.
int[] intArray = Stream.of(stringArray).mapToInt(Integer::parseInt).toArray();
String[] stringArray = Stream.of(arr).map(String::valueOf).toArray(String[]::new);
String[] stringArray = new String[]{"!", "@", "#"};
List<String> stringList = Stream.of(stringArray).collect(Collectors.toList());
List<String> stringList = new ArrayList<>(Arrays.asList("!","@","#"));
String[] stringArray = stringList.toArray(new String[0]);
// 변환 전 클래스
@Getter
class Soldier {
String name;
int age;
public Soldier(String name, int age) {
this.name = name;
this.age = age;
}
}
// 변환 대상 클래스
@Getter
class King {
String name;
int age;
public King(String name, int age) {
this.name = name;
this.age = age;
}
}
// 샘플 Soldier stream 생성
Stream<Soldier> s = Stream.of(new Soldier("A", 18), new Soldier("B", 22), new Soldier("C", 19));
// map()을 이용하여 변환하기
List<King> k = s.map(soldier -> new King(soldier.getName(), soldier.getAge()))
.collect(Collectors.toList());
// 변환 전 클래스
@Getter
class Soldier {
String name;
int age;
public Soldier(String name, int age) {
this.name = name;
this.age = age;
}
}
// 변환 대상 클래스
@Getter
class King {
String name;
int age;
public King(String name, int age) {
this.name = name;
this.age = age;
}
}
// 샘플 Soldier stream 생성
Stream<Soldier> s = Stream.of(new Soldier("Arthur", 18), new Soldier("Belisarius", 22), new Soldier("Caesar", 19));
// filter()를 이용하여 Arthur만 골라서 map()을 이용하여 King으로 변환하기
List<King> k = s.filter(soldier -> "Arthur".equals(soldier.getName()))
.map(soldier -> new King(soldier.getName(), soldier.getAge()))
.collect(Collectors.toList());
@Getter
@Setter
class Datapoint {
private Double maximum;
}
public void sortStream() {
List<Datapoint> datapoints = new ArrayList<>();
int max = 10;
datapoints.add(new Datapoint().withMaximum(Math.random() * max));
datapoints.add(new Datapoint().withMaximum(Math.random() * max));
datapoints.add(new Datapoint().withMaximum(Math.random() * max));
log.debug("data points: {}", datapoints);
// 객체 목록 중 특정 필드(maximum)값을 기준으로 최대값을 갖고 있는 객체 추출 (stream.max() 이용)
Datapoint datapointMax = datapoints.stream()
.max(Comparator.comparing(Datapoint::getMaximum))
.orElse(new Datapoint().withMaximum(0D));
log.debug("data point MAX: {}", datapointMax);
// 객체 목록 중 특정 필드(maximum)값을 기준으로 최소값을 갖고 있는 객체 추출 (stream.min() 이용)
Datapoint datapointMin = datapoints.stream()
.min(Comparator.comparing(Datapoint::getMaximum))
.orElse(new Datapoint().withMaximum(0D));
log.debug("data point MIN: {}", datapointMin);
}
// 실행 로그
data points: [{Maximum: 5.471390124016474,}, {Maximum: 2.7559360370945916,}, {Maximum: 0.5778257233234019,}]
data point MAX: {Maximum: 5.471390124016474,}
data point MIN: {Maximum: 0.5778257233234019,}
[Java] 자바 2차원 배열 생성(선언 및 초기화) (0) | 2020.08.31 |
---|---|
이클립스에 스프링툴즈(STS) 설치하기 (0) | 2020.07.22 |
[Java] 자바 ThreadPoolExecutor 를 이용하여 멀티쓰레드 구현하기 (0) | 2020.04.17 |
[Java] 자바 멀티쓰레드 (Multi Thread) (0) | 2020.04.17 |
[Java] 자바 멀티쓰레드에서 로그확인을 위한 uuid 설정하기 (0) | 2020.03.13 |