notice Java 28

change



-------------------------------------------------
package sample;

import static java.math.BigDecimal.*;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import sample.dto.ActDto;
import sample.dto.EstDto;
import sample.dto.GroupActEstDto;
import sample.dto.GroupDto;

public class Keisan {

	public static void main(String[] args) {

		List<GroupDto> grpList = new ArrayList<GroupDto>();
		grpList.add(new GroupDto("000", "name000"));
		grpList.add(new GroupDto("1**", "name1**"));
		grpList.add(new GroupDto("11*", "name11*"));
		grpList.add(new GroupDto("110", "name110"));
		grpList.add(new GroupDto("111", "name111"));
		grpList.add(new GroupDto("112", "name112"));
		grpList.add(new GroupDto("12*", "name12*"));
		grpList.add(new GroupDto("120", "name120"));
		grpList.add(new GroupDto("121", "name121"));
		grpList.add(new GroupDto("13*", "name13*"));
		grpList.add(new GroupDto("130", "name130"));
		grpList.add(new GroupDto("141"));
		grpList.add(new GroupDto("142"));
		grpList.add(new GroupDto("152"));
		grpList.add(new GroupDto("153"));
		grpList.add(new GroupDto("160"));
		grpList.add(new GroupDto("255"));
		grpList.add(new GroupDto("260"));
		grpList.add(new GroupDto("310"));

		List<ActDto> actList = new ArrayList<ActDto>();
		actList.add(new ActDto("110", 1000.0050));
		actList.add(new ActDto("111", 1200));
		actList.add(new ActDto("120", 1300));
		actList.add(new ActDto("130", 1400));
		actList.add(new ActDto("141", 1500));
		actList.add(new ActDto("152", 1600));
		actList.add(new ActDto("153", 1700));
		actList.add(new ActDto("255", 1800));

		List<EstDto> estList = new ArrayList<EstDto>();
		estList.add(new EstDto("110", 2000));
		estList.add(new EstDto("112", 2100));
		estList.add(new EstDto("121", 2200));
		estList.add(new EstDto("122", 2300));
		estList.add(new EstDto("142", 2400));
		estList.add(new EstDto("160", 2500));
		estList.add(new EstDto("260", 2600));
		estList.add(new EstDto("310", 2700));
		estList.add(new EstDto("OPT1", 1111));
		estList.add(new EstDto("OPT2", 2222));

		// グループマスタをMapに移動
		Map<String, GroupActEstDto> resultMap = convGroupListToMap(grpList);
		// 実績をMapに移動
		moveActListToMap(actList, resultMap);
		// 見積をMapに移動
		moveEstListToMap(estList, resultMap);

		// サマリに金額加算
		for (GroupActEstDto result : resultMap.values()) {
			if (result.isSummaryGroup() || result.isSummaryUnnecessaryGroup()) {
				// サマリグループかサマリ不要グループなら加算対象外
				continue;
			}
			// サマリ(N**)に金額を追加
			addKingaku(result.getSummaryGroup2(), resultMap, result);
			// サマリ(NN*)に金額を追加
			addKingaku(result.getSummaryGroup3(), resultMap, result);
		}

		List<GroupActEstDto> results = new ArrayList<>(resultMap.values());
		Collections.sort(results); // 並び替え
		results.add(getTotalDto(results)); // 合計情報追加

		for (GroupActEstDto result : results) {
			System.out.println(result);
		}

	}

	/**
	 * グループマスタをMapに変換
	 */
	private static Map<String, GroupActEstDto> convGroupListToMap(List<GroupDto> grpList) {
		Map<String, GroupActEstDto> resultMap = new ConcurrentHashMap<>();
		for (GroupDto group : grpList) {
			GroupActEstDto dto = new GroupActEstDto(group.getGroup());
			dto.setGroupName(group.getGroupName());
			resultMap.put(group.getGroup(), dto);
		}
		return resultMap;
	}

	/**
	 * 実績をMapに移動
	 */
	private static void moveActListToMap(List<ActDto> actList, Map<String, GroupActEstDto> resultMap) {
		for (ActDto act : actList) {
			GroupActEstDto dto = resultMap.get(act.getGroup());
			if (dto == null) { // エントリなければ作成
				dto = new GroupActEstDto(act.getGroup());
				resultMap.put(act.getGroup(), dto);
			}
			dto.setActKingaku(act.getActKingaku());
		}
	}

	/**
	 * 見積をMapに移動
	 */
	private static void moveEstListToMap(List<EstDto> estList, Map<String, GroupActEstDto> resultMap) {
		for (EstDto est : estList) {
			GroupActEstDto dto = resultMap.get(est.getGroup());
			if (dto == null) { // エントリなければ作成
				dto = new GroupActEstDto(est.getGroup());
				resultMap.put(est.getGroup(), dto);
			}
			dto.setEstKingaku(est.getEstKingaku());
		}
	}

	/**
	 * サマリグループに金額を加算
	 */
	private static void addKingaku(String summaryGroup, Map<String, GroupActEstDto> resultMap, GroupActEstDto result) {
		GroupActEstDto dto = resultMap.get(summaryGroup);
		if (dto == null) { // サマリグループなければMapに新規追加
			dto = new GroupActEstDto(summaryGroup);
			resultMap.put(summaryGroup, dto);
		}
		dto.addActKingaku(result.getActKingaku()); // 金額加算
		dto.addEstKingaku(result.getEstKingaku());
	}

	/**
	 * 合計情報を取得
	 */
	private static GroupActEstDto getTotalDto(List<GroupActEstDto> results) {
		BigDecimal totalActKingaku = ZERO;
		BigDecimal totalEstKingaku = ZERO;
		for (GroupActEstDto result : results) {
			if (!result.isSummaryGroup()) {
				totalActKingaku = totalActKingaku.add(result.getActKingaku() == null ? ZERO : result.getActKingaku());
				totalEstKingaku = totalEstKingaku.add(result.getEstKingaku() == null ? ZERO : result.getEstKingaku());
			}
		}
		GroupActEstDto total = new GroupActEstDto();
		total.setActKingaku(totalActKingaku);
		total.setEstKingaku(totalEstKingaku);
		return total;
	}

}



-------------------------------------------------