java - 通过查看第一个和最后一个元素来格式化 Map

标签 java hashmap

我想使用 Map 返回一个字符串,如下所示 “汽车:1 个值(value)为 10.00 美元,2 个值(value)为 20.00 雷亚尔,3 个值(value)为 5.00 美元。总计 = 25.00。”

如何组装结构如下:

如果 map 有1条记录,则显示文本如下 “汽车:1 件值(value)为 10.00 美元。总计 = 30.00。”

如果 map 有2条记录,则显示文本如下 “汽车:1 件值(value)为 10.00 美元,2 件值(value)为 20.00 美元。总计 = 30.00 美元。”

如果 map 有超过3条记录,则显示如下文本 “汽车:1 个值(value)为 10.00 美元,2 个值(value)为 20.00 美元,3 个值(value)为 40.00 美元。总计 = 60.00 美元。”

如果列表有 2 个元素,则用逗号分隔并在末尾添加句点 如果列表有一个元素,它只会在末尾添加一个句点

我按如下方式设置 map

Map<Integer, BigDecimal> code = new LinkedHashMap<Integer, BigDecimal>();
        code.put(1, new BigDecimal("10.0"));
        code.put(2, new BigDecimal("20.0"));
        code.put(3, new BigDecimal("5.99"));

for (Map.Entry<Integer, BigDecimal> entry : codeMap.entrySet()) {
    Integer key = entry.getKey();
    BigDecimal value = entry.getValue();
    System.out.println(String.format("key: %s | value: %s", key, value));
}

最佳答案

您可以使用StringJoiner来简化各个结果的连接过程。请参阅下面的示例代码

    StringJoiner sj = new StringJoiner( "," );
    double total = 0.0;
    for( Integer i : code.keySet() )
    {
        sj.add( i + " value is $ " + code.get( i ).floatValue() );
        total += code.get( i ).doubleValue();
    }
    StringBuilder sb;
    sb = new StringBuilder( "Cars " ).append( sj.toString() ).append( ". Total is $" ).append( total );

    System.out.println( sb.toString() );

这将提供输出

Cars 1 value is $ 10.0,2 value is $ 20.0,3 value is $ 5.99. Total is $35.99

关于java - 通过查看第一个和最后一个元素来格式化 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62336966/

相关文章:

java - FEN(国际象棋符号)到 HTML 生成器?开源Java

java - libgdx 粒子系统 Z 坐标

java - 如何处理 Java 中未知的 protobuf 字段?

c++ - 如何实现尺寸有限的 map

Java HashMap 内容

java - 我怎样才能让这个正则表达式更短?

java - EDT 和其他Thread 关系关于repaint() 方法java

java - ArrayList 到 HashMap 函数的行为异常

java - 获取 HashMap 中最常用键的有效方法 - Java

java - 如何将 java 字符串转换为映射?