๋ชฉ์ฐจ
Java Stream ์ฌ์ฉ๋ฒ ์ ๋ฆฌ๐
Java 1.8๋ถํฐ ์ง์๋๊ธฐ ์์ํ stream์ฌ์ฉ๋ฒ์ ๋ํด ๊ธฐ๋กํ๋ค.
๊ทธ๋์ stream์ ๋ํด ๊น๊ฒ ๊ณต๋ถํด๋ณธ ์ ์ด ์์ด์ ์ด ๊ธฐํ์ ์ ๋๋ก ๊ณต๋ถํด ๋ณด๋๋ก ํ๊ฒ ๋ค.
์์ผ๋ก jdk 1.8์ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ๋ฐฐ์ด, ์ปฌ๋ ์ ๋ค๋ฃฐ ๋ for๋ฌธ ๋๋ฐฐํ๊ธฐ ๋ณด๋จ ํจ์จ์ ์ผ๋ก stream์ ์ฌ์ฉํ ์ ์๋๋ก ๊ณต๋ถํ ์์ ์ด๋ค.๐ค
์๋ฅผ ๋ค์ด intํ์ ๋ฐฐ์ด์ ๊ฐ์ ์ค๋ณต ์ ๊ฑฐ ํ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด์ list๋ก ๋ฐํํ๋ ค๊ณ ํ๋ค.
๊ทธ๋ฌ๋ฉด ์คํธ๋ฆผ์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ๋ ์๋์ฒ๋ผ ๊ธด ์ฝ๋๋ฅผ ์ ๋ ฅํด์ผ ํ๋ค.
์ด๋ฅผ ์คํธ๋ฆผ์ ์ด์ฉํ๋ฉด ์๋ ํ์ค์ด๋ฉด ๋๋ค.
์ด๋ฅผ ์ข ๋ ํ์ดํ๋ฉด ์๋์ ๊ฐ๋ค.
System.out.println(Arrays.stream(arr).boxed() // stream ์์ฑ
.distinct() // ์ค๋ณต ์ ๊ฑฐ
.sorted(Comparator.reverseOrder()) // ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
.collect(Collectors.toList()) // list๋ก ๋ฐํ
);
stream์ ๋ค์ํ ๋ฉ์๋๋ค์ด ๋ง๊ธฐ ๋๋ฌธ์ ๋ฉ์๋๋ค์ ์ ๋ถ์ด๋ฉด ํจ์จ์ ์ผ๋ก ์ด์ฉํ ์ ์๋ค.
stream์ ์ ์ธ(์์ฑ), ๊ฐ๊ณต, ๋ฐํ ์ธ ๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ง
์ฝ๋๋ก ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
์ ์ธ(์์ฑ)๐ฅฐ
๋ฐฐ์ด, ์ปฌ๋ ์ (list, set, map..etc) ๋ฑ์ stream ํํ๋ก ๋ง๋ ๋ค.
String[] arr = {"a", "b", "c", "a", "b", "c", "f"};
List<String> list = Arrays.asList(arr);
// ๋ฐฐ์ด stream ์์ฑ
Stream<String> stream = Arrays.stream(arr);
// ์ปฌ๋ ์
stream ์์ฑ
Stream<String> cStream = list.stream();
// ๋ณ๋ ฌ์ฒ๋ฆฌ stream ์์ฑ
Stream<String> paStream = list.parallelStream();
์คํธ๋ฆผ์ ์ ์ธํ๊ณ ๊ฐ์ ๋ฃ๋ ์ ๋ฐฉ๋ฒ ๋ง๊ณ ๋ ์๋์ฒ๋ผ ์ง์ ๋ฐ๋ก ์ฌ์ฉํ ์๋ ์๋ค.
Arrays.stream(arr).๋ฉ์๋()...
list.stream(arr).๋ฉ์๋()...
๊ฐ๊ณต๐
์คํธ๋ฆผ์ ํ์ํ ํํ๋ก ๊ฐ๊ณตํ๋ค.
.boxed()
int, Long, Double ๋ฑ ์ซ์ ํ์ ์ ๋ฐฐ์ด์ stream์ผ๋ก ๋ง๋ค ๊ฒฝ์ฐ stream ๊ฐ์ข ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ฌ์ฉ
๋ ์ฐพ์๋ณด๋ IntStream์ Stream์ผ๋ก ๋ณํํ ๋ boxed()๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
int ์์ฒด๋ก๋ Collection์ ๋ชป ๋ด๊ธฐ์ Integer ํด๋์ค๋ก ๋ณํํ์ฌ List<Integer> ๋ก ๋ด๋ ์ฉ๋ ๋ฑ์ ์ฌ์ฉ
ex) IntStream -> Stream<Integer>
์ปฌ๋ ์ ์คํธ๋ฆผ์์๋ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
// ๋ฐฐ์ด์ ๊ฐ์ ์ค๋ณต ์ ๊ฑฐ ํ ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํ ๋ค list๋ก ๋ฐํ๋ฐ๋ ์ฝ๋(ํธ์ ์ ํ์ค๋ก ์)
System.out.println(Arrays.stream(arr).boxed().distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList()));
.count()
๋ฐฐ์ด, ์ปฌ๋ ์ ํฌ๊ธฐ ํ์ธ
// ๋ฐฐ์ด์ ํฌ๊ธฐ ํ์ธ
System.out.println(Arrays.stream(arr).count());
// ์ปฌ๋ ์
(list)์ ํฌ๊ธฐ ํ์ธ
System.out.println(list.stream().count());
.sorted()
์ ๋ ฌํ ๋ ์ฌ์ฉ
์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์์๊ฐ ์ ๋ ฌ๋์ง ์์ intํ ๋ฐฐ์ด์ธ arr๊ณผ list์ ๊ฐ์ด ์ ๋ ฌ๋ ๊ฑธ ํ์ธ ํ ์ ์๋ค.
// ๋ฐฐ์ด ์ ๋ ฌ
System.out.println("๋ฐฐ์ด ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ : " + Arrays.stream(arr).boxed().sorted(Comparator.reverseOrder()).collect(Collectors.toList()));
// ์ปฌ๋ ์
(list)์ ํฌ๊ธฐ ํ์ธ
System.out.println("์ปฌ๋ ์
์ ๋ ฌ : " + list.stream().sorted().collect(Collectors.toList()));
.sorted(Comparator.reverseOrder())
์ญ์ ๋ ฌ(๋ด๋ฆผ์ฐจ์)ํ ๋ ์ฌ์ฉ
// ๋ฐฐ์ด ์ญ์ ๋ ฌ
System.out.println(Arrays.stream(arr).boxed().sorted(Comparator.reverseOrder()).collect(Collectors.toList()));
// ์ปฌ๋ ์
์ญ์ ๋ ฌ
System.out.println(list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()));
.findFirst()
์คํธ๋ฆผ์ ์ฒซ๋ฒ ์งธ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
// ๋ฐฐ์ด ์คํธ๋ฆผ ์ฒซ๋ฒ ์งธ ๊ฐ ๊ฐ์ ธ์จ๋ค.
System.out.println(Arrays.stream(arr).findFirst().getAsInt());
// ์ปฌ๋ ์
์คํธ๋ฆผ ์ฒซ๋ฒ ์งธ ๊ฐ ๊ฐ์ ธ์จ๋ค.
System.out.println(list.stream().findFirst().get());
.skip(index)
๊ฐ์ ์ธ๋ฑ์ค๊น์ง ์๋ตํ๊ณ ๊ทธ ๋ค์ ๋ฒ์ง๋ถํฐ ๊ฐ์ ธ์จ๋ค.
// ๋ฐฐ์ด ์คํธ๋ฆผ์ ์ฒซ๋ฒ ์งธ ์ธ๋ฑ์ค๋ฅผ ์ ์ธํ ๊ฐ๋ง ๊ฐ์ ธ์จ๋ค.
System.out.println(Arrays.stream(arr).boxed().skip(1).collect(Collectors.toList()));
// ์ปฌ๋ ์
์คํธ๋ฆผ์ ์ฒซ๋ฒ ์งธ ์ธ๋ฑ์ค๋ฅผ ์ ์ธํ ๊ฐ๋ง ๊ฐ์ ธ์จ๋ค.
System.out.println(list.stream().skip(1).collect(Collectors.toList()));
// ์ปฌ๋ ์
์คํธ๋ฆผ์ ์ฒซ๋ฒ ์งธ ์ธ๋ฑ์ค๋ฅผ ์ ์ธํ ๊ฐ๋ง ๊ฐ์ ธ์จ๋ค.(skip์ 0์ ๋ฃ์ด๋ณด๋ ๋ณํ๊ฐ ์๋ ๊ฑธ ๋ณด๋ 1๋ฒ์ง๋ถํฐ ์์์ธ ๋ฏ ์ถ๋ค.)
System.out.println(list.stream().skip(0).collect(Collectors.toList()));
.skip(๋ฐฐ์ดํฌ๊ธฐ -1).findFirst()
์คํธ๋ฆผ์ ๋ง์ง๋ง ์ธ๋ฑ์ค ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
// ๋ฐฐ์ด ์คํธ๋ฆผ์ ๋ง์ง๋ง ๊ฐ ์ฐพ๊ธฐ
System.out.println(Arrays.stream(arr).skip(arr.length -1).findFirst().getAsInt());
// ๋ฐฐ์ด ์คํธ๋ฆผ์ ๋ง์ง๋ง์์ ๋๋ฒ ์งธ ๊ฐ ์ฐพ๊ธฐ
System.out.println(Arrays.stream(arr).skip(arr.length -2).findFirst().getAsInt());
// ์ปฌ๋ ์
์คํธ๋ฆผ์ ๋ง์ง๋ง ๊ฐ ์ฐพ๊ธฐ
System.out.println(list.stream().skip(list.size() - 1).findFirst().get());
// ์ปฌ๋ ์
์คํธ๋ฆผ์ ๋ง์ง๋ง์์ ๋๋ฒ ์งธ ๊ฐ ์ฐพ๊ธฐ
System.out.println(list.stream().skip(list.size() - 2).findFirst().get());
.limit(index)
์ธ๋ฑ์ค๊น์ง๋ง ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
// ๋ฐฐ์ด ์คํธ๋ฆผ 5๋ฒ ์งธ ์ธ๋ฑ์ค๊น์ง๋ง ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
System.out.println(Arrays.stream(arr).boxed().limit(5).collect(Collectors.toList()));
// ์ปฌ๋ ์
์คํธ๋ฆผ 5๋ฒ ์งธ ์ธ๋ฑ์ค๊น์ง๋ง ๊ฐ ๊ฐ์ ธ์ค๊ธฐ
System.out.println(list.stream().limit(3).collect(Collectors.toList()));
.distinct()
์ค๋ณต ์๋ต
// ๋ฐฐ์ด ์คํธ๋ฆผ์ ์ค๋ณต ์๋ตํ ๊ฐ
System.out.println(Arrays.stream(arr).boxed().distinct().collect(Collectors.toList()));
// ์ปฌ๋ ์
์คํธ๋ฆผ์ ์ค๋ณต ์๋ตํ ๊ฐ
System.out.println(list.stream().distinct().collect(Collectors.toList()));
.max(๋ฐ์ดํฐํ์ ::compare)
์ต๋๊ฐ
// ๋ฐฐ์ด ์คํธ๋ฆผ์ ์ต๋๊ฐ
System.out.println(Arrays.stream(arr).boxed().max(Integer::compare).get());
// ์ปฌ๋ ์
์คํธ๋ฆผ์ ์ต๋๊ฐ
System.out.println(list.stream().max(Integer::compare).get());
.min(๋ฐ์ดํฐํ์ ::compare)
์ต์๊ฐ
// ๋ฐฐ์ด ์คํธ๋ฆผ์ ์ต์๊ฐ
System.out.println(Arrays.stream(arr).boxed().min(Integer::compare).get());
// ์ปฌ๋ ์
์คํธ๋ฆผ์ ์ต์๊ฐ
System.out.println(list.stream().min(Integer::compare).get());
.average()
ํ๊ท
๋ฐฐ์ด์ ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ, ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ mapToDouble(Integer::doubleValue)์ ํ๋ฒ ๊ฑฐ์น ๋ค์ ์ฌ์ฉ ๊ฐ๋ฅ
// ๋ฐฐ์ด ์คํธ๋ฆผ์ ํ๊ท
System.out.println(Arrays.stream(arr).average().getAsDouble());
// ์ปฌ๋ ์
์คํธ๋ฆผ์ ํ๊ท (์ปฌ๋ ์
์ ๊ฒฝ์ฐ ์๋์ฒ๋ผ .mapToDouble(Integer:doubleValue)์ ํ๋ฒ ์์ด ๋ค์ .average() ์ฌ์ฉ ๊ฐ๋ฅ
System.out.println(list.stream().mapToDouble(Integer::doubleValue).average().getAsDouble());
.sum()
ํฉ๊ณ
.average()์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปฌ๋ ์ ์ ๊ฒฝ์ฐ mapToInt(Integer::intValue)๋ก ํ๋ฒ ๋ณ๊ฒฝ ํ์
// ๋ฐฐ์ด ์คํธ๋ฆผ์ ํฉ๊ณ
System.out.println(Arrays.stream(arr).sum());
// ์ปฌ๋ ์
์คํธ๋ฆผ์ ํฉ๊ณ
System.out.println(list.stream().mapToInt(Integer::intValue).sum());
๋๋ค(Lambda)๋ฅผ ํ์ฉํ stream ๋ฉ์๋๐
๋๋ค์ ๋ํ ์ค๋ช ์ ์๋ ๊ธ ์ฐธ์กฐ
[Java] Java Lambda ์ ๋ฆฌ(jdk 1.8๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅ)
๋ชฉ์ฐจ ์ฐ์ฐจ๋ ์์ด๋๋ฐ ๊ณต๋ถ๋ ๋์ด ์๊ณ ์์ง ๋ชจ๋ฅด๋๊ฒ ๋๋ฌด ๋ง๋ค. ๊ทธ๋์ ๋ ธ์ ํด์ ์ฝ๋ฉ์ ๋ชปํ๊ธฐ ์ ๊น์ง๋ ๊พธ์คํ ๋ถ์กฑํ ๋ถ๋ถ์ ๊ณต๋ถํด์ ๋ฉ๊ฟ ์๊ฐ์ด๋ค. Java Lambda ์ ๋ฆฌ(java 1.8 ์ด์๋ถํฐ ๊ฐ๋ฅ
yaga.tistory.com
๋๋ค(Lambda)
๋๋ค์ ํต์ฌ์ (paramter) -> { ์ํ ์ฝ๋ }๋ฅผ ํตํด ๋ฉ์๋๋ฅผ ์ ์ํ์ง ์๊ณ ๋ ๋ฉ์๋์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ธ๋ฐ ๋ฉ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ด์ง๋ง ์ ์ํ์ง ์๊ณ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค.
Lambda๋ ์๋ฌด ๊ณณ์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ์ ๋๋ถ๋ถ์ ์คํธ๋ฆผ์ด๋ forEach ๋ฑ์ ์ฌ์ฉํ ๋ ์ผํ์ฉ์ผ๋ก ์ฌ์ฉ๋๋ค.
Lambda๋ฅผ ์ด์ฉํ list, map ์ถ๋ ฅ
.map((function) -> ์ํ ์ฝ๋)
ํจ์๋ฅผ paramter๊ฐ์ผ๋ก ๋๊ธฐ๊ณ ์ฝ๋๋ฅผ ์ํํ๋ค. ์ฃผ๋ก ๊ฐ์ ๋ฐ๊ฟ์ฃผ๊ฑฐ๋ ๋ํด์ค ๋ ์ฌ์ฉํ๋ค.
map์ ์ฝ๋์์ ๋ฉ์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ฐ ์ด๊ฑด .forEach๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ
//userVo list๋ฅผ userDto list๋ก ๋ณํ
public List<UserDto> selectUserList() throws Exception{
List<UserVo> userVoList = userMapper.selectUserList();
List<UserDto> userDtoList = userVoList.stream().
map(u -> new UserDto(u.getUserNo(), u.getName(), u.getEmail(), u.getPassword())).collect(Collectors.toList());
return userDtoList;
}
// ๋ฐฐ์ด ์คํธ๋ฆผ์์ map์ด 1์ด๋ฉด true ์๋๋ฉด false
System.out.println(Arrays.stream(arr).boxed().map(val -> val == 1).collect(Collectors.toList()));
// ์ปฌ๋ ์
์คํธ๋ฆผ์์ map์ด 1์ด๋ฉด true ์๋๋ฉด false
System.out.println(list.stream().map(val -> val ==1).collect(Collectors.toList()));
// map ๊ฐ๋ง๋ค 10 ๋ํ๊ธฐ
System.out.println(Arrays.stream(arr).boxed().map(val -> val = val + 10).collect(Collectors.toList()));
System.out.println(list.stream().map(val -> val = val + 10).collect(Collectors.toList()));
// map ๊ฐ ๋ฐ์ฌ๋ฆผ
System.out.println(Arrays.stream(arr).boxed().map(val -> Math.round(val*10)/10.0).collect(Collectors.toList()));
System.out.println(list.stream().map(val -> Math.round(val*10)/10.0).collect(Collectors.toList()));
.forEach((parameter) -> ์ฝ๋)
๊ฐ ์ธ๋ฑ์ค์ ๊ฐ์ parameter๊ฐ์ผ๋ก ๋๊ธฐ๊ณ ์ฝ๋ ์ํ
๊ฐ๋ง๋ค ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ์ํํ๋ค๊ฑฐ๋ ํ ๋ ์ฌ์ฉ
// forEach(๋ชจ๋ ๊ฐ๋ง๋ค ์
๋ ฅํ ๋ด์ฉ ์ํ)
Arrays.stream(arr).boxed().forEach(val -> System.out.println("forEach print : " + val));
System.out.println();
list.stream().forEach(val -> System.out.println("ForEach print : " + val));
.anyMatch((paramter) -> {์ฝ๋})
์คํธ๋ฆผ ์ค ํ๋์ ๊ฐ์ด๋ผ๋ ์กฐ๊ฑด์ ๋ง์ผ๋ฉด true
// ์คํธ๋ฆผ ๊ฐ ์ค ํ๋๋ผ๋ ๋ง์ผ๋ฉด true
System.out.println(Arrays.stream(arr).anyMatch(val -> val == 100));
System.out.println(list.stream().anyMatch(val -> val == 40));
.noneMatch((parameter) -> {์ฝ๋})
์คํธ๋ฆผ ์ค ํ๋์ ๊ฐ๋ ์กฐ๊ฑด์ ๋ง์ง ์์ผ๋ฉด true
// ์คํธ๋ฆผ ๊ฐ ์ค ํ๋๋ ์๋ง์ผ๋ฉด true
System.out.println(Arrays.stream(arr).noneMatch(val -> val == 10));
System.out.println(list.stream().noneMatch(val -> val == 99));
.allMatch((parameter) -> {์ฝ๋})
์คํธ๋ฆผ์ ๊ฐ์ด ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์์ผ true
// ์คํธ๋ฆผ ๊ฐ ์ค ๋ชจ๋ ์กฐ๊ฑด์ ์ผ์นํ๋ฉด true
System.out.println(Arrays.stream(arr).allMatch(val -> val == 30));
System.out.println(list.stream().allMatch(val -> val == 1));
.filter((parameter) -> {์ฝ๋})
์ฝ๋์ ๋ง๋ ๊ฐ๋ง ๊ฐ์ ธ์จ๋ค. ์์ฃผ ์ฐ์ด๋ ํจ์์ด๋ค.
// ์กฐ๊ฑด์ ํด๋น๋๋ ๊ฐ๋ง ๊ฐ์ ธ์จ๋ค.
System.out.println(Arrays.stream(arr).boxed().filter(val -> val == 10).collect(Collectors.toList()));
System.out.println(list.stream().filter(val -> val == 100).collect(Collectors.toList()));
.reduce(๊ฐ, ๋ฐ์ดํฐํ์ ::sum)
์คํธ๋ฆผ์ ๊ฐ์ ๋ชจ๋ ํ๋๋ก ํฉ์น ๋ ์ฌ์ฉํจ
๋ฐ์ดํฐํ์ ๊ณผ sum์ผ๋ก ํ๋๋ก ํฉ์น ๋ค ๋ง์ง๋ง์ ๊ฐ์ ๋ํด์ ๋ฐํํจ
(String์ ๊ฒฝ์ฐ์๋ ๊ฐ, String::concat์ ์ฌ์ฉ)
// ์คํธ๋ฆผ ๊ฐ์ ๋ชจ๋ ํ๋๋ก ํฉ์น๊ณ ๋ง์ง๋ง์ 5๋ฅผ ๋ํ๋ค.
System.out.println(Arrays.stream(arr).reduce(100000, Integer::sum));
System.out.println(list.stream().reduce(500000, Integer::sum));
// ์คํธ๋ฆผ์ ํ๋๋ก ํฉ์น๊ณ "avenger : "๋ฅผ ๋ถ์ธ๋ค.
System.out.println(list2.stream().reduce("avengers : ", String::concat));
๋ฐํ๐
์์์ ๊ฐ๊ณตํ ๊ฐ์ ์ํ๋ ํํ๋ก ๊ฐ์ ธ์จ๋ค.
๊ฐ์ด ํ๋๋ง ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด get(), getAsInt() ๋ฑ์ผ๋ก ๊ฐ์ ธ์ด
๋ฐฐ์ด๋ก ๊ฐ์ ธ์ฌ๋ ค๋ฉด ๋์ .toArray();
๋๋จธ์ง ์ปฌ๋ ์ ํํ๋ .collect(Collectors.toList()); ์ด๋ฐ์์ผ๋ก ๊ฐ์ ธ์ค๋ฉด ๋๊ณ
list๊ฐ ์๋ ๋ค๋ฅธ ๊ฑธ๋ก ๊ฐ์ ธ์ค๊ณ ์ถ์ผ๋ฉด Collectors.toList()๋ฅผ toSet(), toMap() ์ด๋ฐ์์ผ๋ก ๊ฐ์ ธ์ค๋ฉด ๋จ
๊ทธ ์ธ์ ๋ฐํ ๋ฐฉ๋ฒ์ ์๋์ฒ๋ผ ๋ฐํ ๊ฐฏ์๋ก ๋ฐํํ ์๋ ์๊ณ ๋๋จธ์ง๋ ์๋ ๋ฐํ ์์ ์ ์ ์๋ค.
Long cnt = Arrays.stream(arr).boxed().sorted().collect(Collectors.counting());
์๋์ฒ๋ผ ํน์ ๋ฌธ์์ด์ ๊ตฌ๋ถ์๋ก ๋ถ์ฌ์ ๋ฐํํ ์๋ ์์
System.out.println(Arrays.stream(strArr).collect(Collectors.joining("|")));
๋ฐํ ์์
package java_test.dev.java;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
// stream ๋ฐํ ์์
public class Test1 {
public static void main(String[] args) {
int[] arr = {10, 122, 10, 30, 2, 30, 31, 32, 33, 100, 1};
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(4);
list.add(1);
list.add(3);
list.add(4);
list.add(40);
list.add(100);
System.out.println(Arrays.stream(arr).boxed().distinct()); // ๋ฐํํ๊ธฐ ์ , ์ฆ ๊ฐ๊ณต๋ง ํ ์ํ
System.out.println(list.stream().max(Integer::compare)); // ๋ฐํํ๊ธฐ ์ , ์ฆ ๊ฐ๊ณต๋ง ํ ์ํ
int[] arr2 = Arrays.stream(arr).distinct().toArray(); // ๋ฐฐ์ด๋ก ๋ฐํ
for (int i : arr2) {System.out.println(i);}
System.out.println("=============================================================");
List<Integer> list2 = Arrays.stream(arr).boxed().distinct().collect(Collectors.toList());
list2.forEach(val -> System.out.println(val));
System.out.println("=============================================================");
int val2 = list.stream().max(Integer::compare).get(); // ์ต๋๊ฐ ํ๋ ๋ฐํ
System.out.println("val2 : " + val2);
System.out.println("=============================================================");
long cnt = list.stream().collect(Collectors.counting()); // ํด๋นํ๋ ๊ฐฏ์ ๋ฐํ
System.out.println("cnt : " + cnt);
// ๋ฌธ์์ด ๋ฐฐ์ด ์ ์ธ
String[] strArr = {"10", "20", "30"};
System.out.println("=============================================================");
// ์ปฌ๋ ์
๋ด ๋ชจ๋ ๊ฐ์ |๋ฅผ ๋ถ์ฌ์ ๋ฐํ | ์์ด ๋ถ์ฌ์ค๋ ค๋ฉด ""๋ก ๋ณ๊ฒฝ
System.out.println(Arrays.stream(strArr).collect(Collectors.joining("|")));
System.out.println("=============================================================");
Double val4 = Arrays.stream(strArr) // Int ํํ๋ก ํ๊ท ๊ฐ ๋ฐํ (๋ฐฐ์ด์ด String์ผ ๊ฒฝ์ฐ)
.collect(Collectors.averagingInt(val -> Integer.parseInt(val)));
Double val5 = Arrays.stream(strArr) // Double ํํ๋ก ํ๊ท ๊ฐ ๋ฐํ(๋ฐฐ์ด์ด String์ผ ๊ฒฝ์ฐ)
.collect(Collectors.averagingDouble(val -> Double.parseDouble(val)));
Double val6 = Arrays.stream(strArr) // Long ํํ๋ก ํ๊ท ๊ฐ ๋ฐํ(๋ฐฐ์ด์ด String์ผ ๊ฒฝ์ฐ)
.collect(Collectors.averagingLong(val -> Long.parseLong(val)));
System.out.println("val4 : " + val4);
System.out.println("val5 : " + val5);
System.out.println("val6 : " + val6); // ๊ฐ ํ์ธ
System.out.println("=============================================================");
String[] getGroupParti = {"hulk", "ironMan", "loki", "thor", "hulk", "hulk", "hulk", "hulk"};
// ์ด๋ฆ, ๊ฐฏ์๋ก groupingํจ(์ค๋ผํด์์ group byํด์ ๊ฐ์ ธ์ค๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋
)
Map<String, Long> map = Arrays.stream(getGroupParti)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println("hulk : " + map.get("hulk")); // ๊ฒฐ๊ณผ : hulk : 5(hulk๊ฐ 5๊ฐ๋๊น)
System.out.println("=============================================================");
// ์กฐ๊ฑด์ ๋ง์ผ๋ฉด true, ์๋๋ฉด false์ list ํํ๋ก ๋ด์์ค
Map<Boolean, List<String>> map2 = Arrays.stream(getGroupParti)
.collect(Collectors.partitioningBy(val -> val == "hulk"));
System.out.println(map2.get(true)); // ๊ฒฐ๊ณผ : [hulk,hulk,hulk,hulk,hulk]
}
}
๊ฒฐ๊ณผ
java.util.stream.DistinctOps$1@e9e54c2
Optional[100]
10
122
30
2
31
32
33
100
1
=============================================================
10
122
30
2
31
32
33
100
1
=============================================================
val2 : 100
=============================================================
cnt : 7
=============================================================
10|20|30
=============================================================
val4 : 20.0
val5 : 20.0
val6 : 20.0
=============================================================
hulk : 5
=============================================================
[hulk, hulk, hulk, hulk, hulk]
๋ง๋ฌด๋ฆฌ๐ฅฑ
stream์ ์ฅ์ ๐ค
1. ์ฌ์ฉํ๊ธฐ ํธํจ
2. ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง
3. ๊ฐ๋ ์ฑ์ด ๋์์ง
stream์ ๋จ์ ๐
1. ๋๋ฒ๊น ์ด ํ๋ฌ
2. ์ฌํ์ฉ ๋ถ๊ฐ๋ฅ
3. ์๋๊ฐ ๋๋ฆผ
์ฅ๋จ์ด ์์ผ๋ ์ ์ฌ์ ์์ ํจ์จ์ ์ผ๋ก ์ฐ๋๊ฒ ์ค์ํ ๋ฏ ์ถ๋ค.
์ ๋ ์ธ์ธ ํ์๋ ์๊ณ ์ดํด๋ฅผ ํ๊ณ ๊ทธ๋ฅผ ๋ฐํ์ผ๋ก ๋์ค์ ์ฐธ์กฐํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ญ์ ๊ธฐ์ตํ๋ ๊ฒ๋ณด๋ค ๊ธฐ๋กํ๋๊ฒ ๋ ๊ณต๋ถ๊ฐ ๋๋ ๋ฏ ์ถ๊ณ ์ค์ ๋ก ์ฝ๋ฉํด๋ณด๊ณ ๋ธ๋ก๊ทธ์ ๊ธ์ ํ๋ฒ ์ ๋ฆฌํ๋ ๊ฒ๋ง์ผ๋ก ๊ธฐ์กด๋ณด๋จ ๋ง์ด ์ดํด๊ฐ ๋์๋ค.
์ฝ๋ฉํ๊ณ ๊ฒฐ๊ณผ ๋ณด๊ณ ์ดํดํ๊ณ ๊ธ ์ ๋ ์๊ฐ ํ ํ ๋๋ต 1์๊ฐ ๋๊ฒ ๊ฑธ๋ฆฐ ๊ฒ ๊ฐ๋ค.๐ฅ
์ฐธ์กฐ : Wakestand Island, 2020.12.6, https://wakestand.tistory.com/419, https://wakestand.tistory.com/418
์๋ฐ ์คํธ๋ฆผ(Stream) ์์ ๋ถํฐ ์ฌ์ฉ๋ฒ๊น์ง ์ ๋ฆฌ
์๋ฐ์์ ์คํธ๋ฆผ์ด๋ผ๊ณ ํ๋ฉด ๋๋ถ๋ถ ์์ฒญ๋๊ฒ ์ด๋ ค์ด ๊ธฐ์ ์ธ ์ค ์๊ณ ์์๋ ์ ์ ํฌ๊ธฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ์คํธ๋ฆผ์ ์์ฒญ ๊ฐ๋จํ๊ณ ์ ์ฉํ ๊ธฐ์ ์ด๋ค ๋ค๋ง ์ค๋ช ํ๋ ์ฌ๋๋ค์ด ์ฌ์ด ๊ฑธ ๋๋ฌด ์ด๋ ต
wakestand.tistory.com

'IT > development' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Java String convert to byte[], byte[] convert to String (2) | 2022.11.23 |
---|---|
[php] php <-> cubrid driver ์ฐ๋ (0) | 2022.11.23 |
[Java] Java Lambda ์ ๋ฆฌ(jdk 1.8๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅ) (0) | 2022.11.23 |
[IDE] eclipse tomcat "Serve modules without publishing"... (0) | 2022.11.23 |
[php] Windows 10 Laravel ์ค์น... (0) | 2022.11.23 |
๋๊ธ