(Java Stream Programming) 9. Collectors_데이터 집계 / 문자열 연결 / 그룹화

soosoorim·2024년 2월 20일
0

Collectors

public static void main(String[] args) {
		
		// Map Data --> List Data 변경
				Map<String, String> menuMap = new HashMap<>();
				menuMap.put("빅맥1", "16000");
				menuMap.put("빅맥2", "26000");
				menuMap.put("빅맥3", "36000");
				menuMap.put("빅맥4", "46000");
				menuMap.put("빅맥5", "56000");
				menuMap.put("빅맥6", "66000");
				menuMap.put("빅맥7", "76000");
				
				// menuMap의 key 로 구성된 List 만들어보기
				// Map을 Stream으로 변경을 하려면 entrySet을 이용해야한다.
				List<String> menuName = menuMap.entrySet() // Set<Entry<key, value>> --> Set<Entry<String, String>>
											   .stream() // Stream<Entry<key, value>> --> Stream<Entry<String, String>>
											   .map(entry -> entry.getKey()) // Stream<String>
											   .collect(Collectors.toList()); // List<String>
				menuName.forEach(System.out::println);

}

데이터 집계

// 모든 메뉴들의 집계(개수, 합계, 최소값, 최대값, 평균) 구하기
		List<Dish> menu = DishData.menu;
		
		IntSummaryStatistics intSummaryStatistics =
		menu.stream() // Stream<Dish>
//			.collect(Collectors.summarizingInt(dish -> dish.getCalories()));
			.collect(Collectors.summarizingInt(Dish::getCalories));
		
		System.out.println(intSummaryStatistics);
        

문자열 연결 joining

1.8 이전 버전

// 문자열 연결하기
		// Stream 사용하지 않고 연결하기
//		menu <-- List<Dish>
//		메뉴명, 메뉴명, 메뉴명, 메뉴명
		String menuNames = "";
		for (Dish item:menu) {
			menuNames += (item.getName() + ",");
		}
		menuNames = menuNames.trim();
		menuNames = menuNames.substring(0, menuNames.length() -1); // 마지막 "," 없애주려는 코드
		System.out.println(menuNames);

1.8 이후 버전

// 문자열 연결하기
		// Stream 이용하기
		String menuNames2 = menu.stream()
//								.map(dish -> dish.getName())
								.map(Dish::getName)
								.collect(Collectors.joining(","));
		System.out.println(menuNames2);

그룹화
스트림 요소를 하나 이상의 특성으로 분류해 그룹화 함

// 그룹핑하기
		// 메뉴의 타입으로 그룹핑
		Map<Dish.Type, List<Dish>> dishesByType =
				menu.stream() // Stream<Dish>
//					.collect(Collectors.groupingBy(dish -> dish.getType()));
					// Map<Type, List<Dish>>
					.collect(Collectors.groupingBy(Dish::getType));
		System.out.println(dishesByType);
		System.out.println(dishesByType.get(Dish.Type.FISH));
		System.out.println(dishesByType.get(Dish.Type.MEAT));
		System.out.println(dishesByType.get(Dish.Type.OTHER));
// 채식메뉴와 일반 메뉴를 그룹핑
		Map<Boolean, List<Dish>> dishesByVegetarian =
				menu.stream()
//					.collect(Collectors.groupingBy(dish -> dish.isVegetarian()));
					// Map<Boolean, List<Dish>>
					.collect(Collectors.groupingBy(Dish::isVegetarian));
		System.out.println(dishesByVegetarian);
		System.out.println(dishesByVegetarian.get(true));
		System.out.println(dishesByVegetarian.get(false));
// 커스텀 그룹화 하기
		Map<String, List<Dish>> dishesByCustom =
		menu.stream()
			// Map<String, List<Dish>>
			.collect(Collectors.groupingBy(dish -> {
				if(dish.getCalories() <= 400) {
					return "DIET"; // 그룹핑 기준
				} else if (dish.getCalories() <= 700) {
					return "NORMAL"; // 그룹핑 기준
				} else {
					return "FAT"; // 그룹핑 기준
				}
			}));
		System.out.println(dishesByCustom);

0개의 댓글

관련 채용 정보