컬렉션과 스트림
import java.util.stream.IntStream;
public class ParallelDemo {
public static void main(String[] args) {
long start, end, total;
IntStream sequantial = IntStream.rangeClosed(1, 100_000_000);
start = System.currentTimeMillis();
total = sequantial.sum();
end = System.currentTimeMillis();
System.out.println("순차 처리 : " + (end - start));
IntStream parallel = IntStream.rangeClosed(1, 100_000_000).parallel();
start = System.currentTimeMillis();
total = parallel.sum();
end = System.currentTimeMillis();
System.out.println("병렬 처리 : " + (end - start));
}
}
import java.util.stream.IntStream;
import java.util.stream.Stream;
import sec01.Nation;
import sec01.Util;
public class FilterDemo {
public static void main(String[] args) {
// 가변 인수이기에 인수의 갯수가 정해져 있지 않다.
Stream<String> s1 = Stream.of("a1", "b1", "b2", "c1", " c2", "c3");
Stream<String> s2 = s1.filter(s -> s.startsWith("c"));
Stream<String> s3 = s2.skip(1);
System.out.print("문자열 스트림 : ");
s3.forEach(Util::print);
// 가변 인수이기에 인수의 갯수가 정해져 있지 않다.
IntStream i1 = IntStream.of(1, 2, 1, 3, 3, 2, 4);
IntStream i2 = i1.filter(i -> i % 2 == 0);
IntStream i3 = i2.distinct();
System.out.print("\n정수 스트림");
i3.forEach(Util::print);
System.out.print("\n인구가 1억(100백만) 이상의 2개 나라 : ");
Stream<Nation> n1 = Nation.nations.stream();
Stream<Nation> n2 = n1.filter(p -> p.getPopulation() > 100.0);
Stream<Nation> n3 = n2.limit(2);
n3.forEach(Util::print);
}
}
import java.util.stream.IntStream;
import java.util.stream.Stream;
import sec01.Util;
public class Map1Demo {
public static void main(String[] args) {
Stream<String> s1 = Stream.of("a1", "b1", "b2", "c1", "c2");
Stream<String> s2 = s1.map(String::toUpperCase);
s2.forEach(Util::print);
System.out.println();
Stream<Integer> i1 = Stream.of(1, 2, 1, 3, 3, 2, 4);
Stream<Integer> i2 = i1.map(i -> i * 2);
i2.forEach(Util::print);
System.out.println();
Stream<String> s3 = Stream.of("a1", "a2", "a3");
Stream<String> s4 = s3.map(s -> s.substring(1));
IntStream i3 = s4.mapToInt(Integer::parseInt);
Stream<String> s5 = i3.mapToObj(i -> "b" + i);
s5.forEach(Util::print);
}
}
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Map3Demo {
public static void main(String[] args) {
List<String> list1 = List.of("안녕", "자바!", "잘 가, C++!");
Stream<String> s1 = list1.stream();
Stream<String> s2 = s1.flatMap(s -> Arrays.stream(s.split(" ")));
s2.forEach(Util::printWithParenthesis);
System.out.println();
List<String> list2 = List.of("좋은 아침");
List<String> list3 = List.of("안녕! 람다", "환영! 스트림");
Stream<List<String>> s3 = Stream.of(list1, list2, list3);
Stream<String> s4 = s3.flatMap(list -> {
if (list.size() > 1) {
return list.stream();
} else {
return Stream.empty();
}
});
s4.forEach(Util::printWithParenthesis);
}
}
특정 속성과 일치되는 스트림 원소의 존재 여부를 조사하거나 검색하는 데 사용되는 스트림의 최종 연산
import java.util.DoubleSummaryStatistics;
import java.util.stream.DoubleStream;
import java.util.stream.Stream;
import sec01.Nation;
public class Reduce2Demo {
public static void main(String[] args) {
Stream<Nation> s1 = Nation.nations.stream();
// China
s1.reduce((n1, n2) -> n1.getPopulation() > n2.getPopulation() ? n1 : n2).ifPresent(System.out::println);
Stream<Nation> s2 = Nation.nations.stream();
double sumOfPopulation = s2.filter(n -> n.getGdpRank() <= 20).mapToDouble(n -> n.getPopulation()).reduce(0.0,
(n1, n2) -> n1 + n2);
// 리스트에서 GDP가 20위 이내의 나라의 인구 총합은 1789.7백만명이다.
System.out.println("리스트에서 GDP가 20위 이내의 나라의 인구 총합은 " + sumOfPopulation + "백만명이다.");
Stream<Nation> s3 = Nation.nations.stream();
DoubleStream ds = s3.mapToDouble(Nation::getPopulation);
DoubleSummaryStatistics dss = ds.summaryStatistics();
// DoubleSummaryStatistics{count=8, sum=1956.800000, min=4.500000, average=244.600000, max=1355.700000}
System.out.println(dss);
}
}
String s = null;
Date d = null;