java: Greedy Algorithm 項目結構基于贪心算法的珠宝配石系统Java实现。系统采用分层架构包含以下核心组件异常处理定义GemBaseException及其子类处理预算为零、参数非法等异常情况实体类GemStone表示宝石信息名称、克拉数、价格GemAllocateItem记录配石明细GemAllocateResultDTO封装配石结果提供转Map功能核心算法实现分数背包问题的贪心算法支持两种排序策略单位价值降序默认和克拉数降序可扩展的IBaseGreedy接口和ISortStrategy策略模式业务服务提供添加宝石库存、清空库存和配石计算功能严格校验输入参数包含两个演示案例展示不同策略的效果系统采用精确的数值处理保留3位小数和规范的JSON输出适用于珠宝行业的配石优化场景。通过策略模式实现了算法灵活扩展可适应不同的业务需求。/** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:12 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : BudgetZeroException.java * explain : 学习 类 **/ package Greedy.common.exception; public class BudgetZeroException extends GemBaseException { public BudgetZeroException() { super(预算必须大于0); } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:12 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : GemBaseException.java * explain : 学习 类 **/ package Greedy.common.exception; public class GemBaseException extends RuntimeException { public GemBaseException(String msg) { super(珠宝配石异常 msg); } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:12 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : GemParamInvalidException.java * explain : 学习 类 **/ package Greedy.common.exception; public class GemParamInvalidException extends GemBaseException { public GemParamInvalidException(String msg) { super(参数非法 msg); } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:13 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : StockEmptyException.java * explain : 学习 类 **/ package Greedy.common.exception; public class StockEmptyException extends GemBaseException { public StockEmptyException() { super(宝石库存为空无法执行配石); } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:13 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : Util.java * explain : 学习 类 **/ package Greedy.common.util; import Greedy.common.Const; public class Util { public static double roundCarat(double val) { double mul Math.pow(10, Const.CARAT_DECIMAL); return Math.round(val * mul) / mul; } public static double roundMoney(double val) { double mul Math.pow(10, Const.MONEY_DECIMAL); return Math.round(val * mul) / mul; } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:11 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : Const.java * explain : 学习 类 **/ package Greedy.common; public class Const { public static final int CARAT_DECIMAL 3; public static final int MONEY_DECIMAL 2; public static final double EPS 1e-6; } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:15 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : GemAllocateItem.java * explain : 学习 类 **/ package Greedy.entity; public class GemAllocateItem { private String stoneName; private double useCarat; private double useCost; // getter / setter public String getStoneName() { return stoneName; } public void setStoneName(String stoneName) { this.stoneName stoneName; } public double getUseCarat() { return useCarat; } public void setUseCarat(double useCarat) { this.useCarat useCarat; } public double getUseCost() { return useCost; } public void setUseCost(double useCost) { this.useCost useCost; } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:15 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : GemAllocateResultDTO.java * explain : 学习 类 **/ package Greedy.entity; import Greedy.common.util.Util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class GemAllocateResultDTO { private double budgetTotal; private double costActual; private double budgetRemain; private double totalCarat; private ListGemAllocateItem detailList new ArrayList(); /** 转Mapkey中文和Python/Go/C#输出结构完全一致 */ public MapString, Object toDict() { ListMapString, Object detailMapList new ArrayList(); for (GemAllocateItem item : detailList) { MapString, Object itemMap new HashMap(); itemMap.put(宝石名称, item.getStoneName()); itemMap.put(取用克拉, Util.roundCarat(item.getUseCarat())); itemMap.put(花费金额, Util.roundMoney(item.getUseCost())); detailMapList.add(itemMap); } MapString, Object root new HashMap(); root.put(预算总额, Util.roundMoney(budgetTotal)); root.put(实际花费, Util.roundMoney(costActual)); root.put(剩余预算, Util.roundMoney(budgetRemain)); root.put(总匹配克拉, Util.roundCarat(totalCarat)); root.put(选用裸石明细, detailMapList); return root; } // getter / setter public double getBudgetTotal() { return budgetTotal; } public void setBudgetTotal(double budgetTotal) { this.budgetTotal budgetTotal; } public double getCostActual() { return costActual; } public void setCostActual(double costActual) { this.costActual costActual; } public double getBudgetRemain() { return budgetRemain; } public void setBudgetRemain(double budgetRemain) { this.budgetRemain budgetRemain; } public double getTotalCarat() { return totalCarat; } public void setTotalCarat(double totalCarat) { this.totalCarat totalCarat; } public ListGemAllocateItem getDetailList() { return detailList; } public void setDetailList(ListGemAllocateItem detailList) { this.detailList detailList; } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:14 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : GemStone.java * explain : 学习 类 **/ package Greedy.entity; public class GemStone { private String stoneName; private double totalCarat; private double batchPrice; public double getUnitCaratValue() { return totalCarat / batchPrice; } // getter / setter public String getStoneName() { return stoneName; } public void setStoneName(String stoneName) { this.stoneName stoneName; } public double getTotalCarat() { return totalCarat; } public void setTotalCarat(double totalCarat) { this.totalCarat totalCarat; } public double getBatchPrice() { return batchPrice; } public void setBatchPrice(double batchPrice) { this.batchPrice batchPrice; } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:16 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : GemMemoryRepo.java * explain : 学习 类 **/ package Greedy.repository; import Greedy.entity.GemStone; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class GemMemoryRepo implements IBaseGemRepo { private final ListGemStone storage new ArrayList(); Override public void addGem(GemStone gem) { storage.add(gem); } Override public ListGemStone getAllGems() { // 返回不可变拷贝防止外部篡改 return Collections.unmodifiableList(new ArrayList(storage)); } Override public void clearAll() { storage.clear(); } Override public int count() { return storage.size(); } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:16 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : IBaseGemRepo.java * explain : 学习 类 **/ package Greedy.repository; import Greedy.entity.GemStone; import java.util.List; public interface IBaseGemRepo { void addGem(GemStone gem); ListGemStone getAllGems(); void clearAll(); int count(); } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:19 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : GemAllocateService.java * explain : 学习 类 **/ package Greedy.service; import Greedy.algorithm.IBaseGreedy; import Greedy.common.Const; import Greedy.common.exception.GemParamInvalidException; import Greedy.common.exception.StockEmptyException; import Greedy.entity.GemAllocateItem; import Greedy.entity.GemAllocateResultDTO; import Greedy.entity.GemStone; import Greedy.repository.IBaseGemRepo; import java.util.List; public class GemAllocateService { private final IBaseGemRepo repo; private final IBaseGreedy alg; // 依赖注入 public GemAllocateService(IBaseGemRepo repo, IBaseGreedy alg) { this.repo repo; this.alg alg; } public void addStoneStock(String stoneName, double totalCarat, double batchPrice) { if (totalCarat Const.EPS || batchPrice Const.EPS) { throw new GemParamInvalidException(宝石[ stoneName ]克拉、价格必须大于0); } GemStone gem new GemStone(); gem.setStoneName(stoneName); gem.setTotalCarat(totalCarat); gem.setBatchPrice(batchPrice); repo.addGem(gem); } public GemAllocateResultDTO allocate(double budget) { ListGemStone gemList repo.getAllGems(); if (gemList.isEmpty()) { throw new StockEmptyException(); } ListGemAllocateItem items alg.calculate(gemList, budget); double totalCarat 0; double totalCost 0; for (GemAllocateItem item : items) { totalCarat item.getUseCarat(); totalCost item.getUseCost(); } double remain budget - totalCost; GemAllocateResultDTO dto new GemAllocateResultDTO(); dto.setBudgetTotal(budget); dto.setCostActual(totalCost); dto.setBudgetRemain(remain); dto.setTotalCarat(totalCarat); dto.getDetailList().addAll(items); return dto; } public void clearStock() { repo.clearAll(); } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:19 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : GemFractionGreedy.java * explain : 学习 类 **/ package Greedy.algorithm; import Greedy.common.Const; import Greedy.common.exception.BudgetZeroException; import Greedy.entity.GemAllocateItem; import Greedy.entity.GemStone; import java.util.ArrayList; import java.util.List; public class GemFractionGreedy implements IBaseGreedy { private final ISortStrategy sortStrategy; public GemFractionGreedy() { this.sortStrategy new UnitValueDescStrategy(); } public GemFractionGreedy(ISortStrategy sortStrategy) { this.sortStrategy sortStrategy; } Override public ListGemAllocateItem calculate(ListGemStone gemList, double budget) { if (budget Const.EPS) { throw new BudgetZeroException(); } ListGemStone sorted sortStrategy.sort(gemList); double remainBudget budget; ListGemAllocateItem result new ArrayList(); for (GemStone gem : sorted) { if (remainBudget Const.EPS) break; double useCarat, useCost; if (gem.getBatchPrice() remainBudget) { useCarat gem.getTotalCarat(); useCost gem.getBatchPrice(); } else { double ratio remainBudget / gem.getBatchPrice(); useCarat gem.getTotalCarat() * ratio; useCost remainBudget; } GemAllocateItem item new GemAllocateItem(); item.setStoneName(gem.getStoneName()); item.setUseCarat(useCarat); item.setUseCost(useCost); result.add(item); remainBudget - useCost; } return result; } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:18 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : IBaseGreedy.java * explain : 学习 类 **/ package Greedy.algorithm; import Greedy.entity.GemAllocateItem; import Greedy.entity.GemStone; import java.util.List; public interface IBaseGreedy { ListGemAllocateItem calculate(ListGemStone gemList, double budget); } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:17 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : ISortStrategy.java * explain : 学习 类 **/ package Greedy.algorithm; import Greedy.entity.GemStone; import java.util.List; public interface ISortStrategy { ListGemStone sort(ListGemStone gemList); } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:18 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : MaxCaratDescStrategy.java * explain : 学习 类 **/ package Greedy.algorithm; import Greedy.entity.GemStone; import java.util.List; import java.util.stream.Collectors; public class MaxCaratDescStrategy implements ISortStrategy { Override public ListGemStone sort(ListGemStone gemList) { return gemList.stream() .sorted((g1, g2) - Double.compare(g2.getTotalCarat(), g1.getTotalCarat())) .collect(Collectors.toList()); } } /** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:17 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : UnitValueDescStrategy.java * explain : 学习 类 **/ package Greedy.algorithm; import Greedy.entity.GemStone; import java.util.List; import java.util.stream.Collectors; public class UnitValueDescStrategy implements ISortStrategy { Override public ListGemStone sort(ListGemStone gemList) { return gemList.stream() .sorted((g1, g2) - Double.compare(g2.getUnitCaratValue(), g1.getUnitCaratValue())) .collect(Collectors.toList()); } }调用/** * encoding: utf-8 * 版权所有 2026 ©涂聚文有限公司 ® * 许可信息查看言語成了邀功盡責的功臣還需要行爲每日來值班嗎 * 描述Greedy Algorithm 贪心算法 * Author : geovindu,Geovin Du 涂聚文. * IDE : IntelliJ IDEA 2024.3.6 Java 17 * # database : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1 Neo4j * # OS : window10 * Datetime : 2026 - 2026/7/21 - 20:20 * User : geovindu * Product : IntelliJ IDEA * Project : JavaAlgorithms * File : GreedyBll.java * explain : 学习 类 **/ package Bll; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.SerializableString; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import Greedy.algorithm.GemFractionGreedy; import Greedy.algorithm.IBaseGreedy; import Greedy.algorithm.ISortStrategy; import Greedy.algorithm.MaxCaratDescStrategy; import Greedy.common.exception.GemBaseException; import Greedy.entity.GemAllocateResultDTO; import Greedy.repository.GemMemoryRepo; import Greedy.repository.IBaseGemRepo; import Greedy.service.GemAllocateService; import java.util.Map; public class GreedyBll { private static final ObjectMapper OBJECT_MAPPER; static { OBJECT_MAPPER new ObjectMapper(); OBJECT_MAPPER.enable(SerializationFeature.INDENT_OUTPUT); OBJECT_MAPPER.getFactory().setCharacterEscapes(new com.fasterxml.jackson.core.io.CharacterEscapes() { private final int[] asciiEscapes; { asciiEscapes new int[128]; for (int i 0; i 128; i) { asciiEscapes[i] ESCAPE_NONE; } asciiEscapes[] ESCAPE_STANDARD; asciiEscapes[\\] ESCAPE_STANDARD; asciiEscapes[\n] ESCAPE_STANDARD; asciiEscapes[\r] ESCAPE_STANDARD; asciiEscapes[\t] ESCAPE_STANDARD; asciiEscapes[\b] ESCAPE_STANDARD; asciiEscapes[\f] ESCAPE_STANDARD; for (int i 0; i 32; i) { asciiEscapes[i] ESCAPE_STANDARD; } } Override public int[] getEscapeCodesForAscii() { return asciiEscapes; } Override public SerializableString getEscapeSequence(int ch) { return null; } }); } public static void demoCase1() throws JsonProcessingException { System.out.println( 案例1性价比优先配石结果 ); IBaseGemRepo repo new GemMemoryRepo(); IBaseGreedy alg new GemFractionGreedy(); GemAllocateService svc new GemAllocateService(repo, alg); svc.addStoneStock(0.8ct白钻, 0.8, 10500); svc.addStoneStock(0.5ct白钻, 0.5, 6800); svc.addStoneStock(0.3ct白钻, 0.3, 4200); svc.addStoneStock(0.2ct粉钻, 0.2, 2800); GemAllocateResultDTO dto svc.allocate(18000); MapString, Object map dto.toDict(); String json OBJECT_MAPPER.writeValueAsString(map); System.out.println(json); } public static void demoCase2() throws JsonProcessingException { System.out.println(\n 案例2优先大克拉配石结果 ); IBaseGemRepo repo new GemMemoryRepo(); ISortStrategy sort new MaxCaratDescStrategy(); IBaseGreedy alg new GemFractionGreedy(sort); GemAllocateService svc new GemAllocateService(repo, alg); svc.addStoneStock(0.8ct白钻, 0.8, 10500); svc.addStoneStock(0.5ct白钻, 0.5, 6800); GemAllocateResultDTO dto svc.allocate(12000); MapString, Object map dto.toDict(); String json OBJECT_MAPPER.writeValueAsString(map); System.out.println(json); } public static void Demo() { try { demoCase1(); demoCase2(); } catch (GemBaseException e) { System.out.println(业务异常 e.getMessage()); } catch (Exception e) { e.getMessage(); } } }输出