【问题标题】:How do I pass values into a map?如何将值传递到地图中?
【发布时间】:2021-01-15 20:12:11
【问题描述】:

我有一个方法,我正在尝试将值传递到其中。方法是:

public void createReport(String reportName, Map<String, String> reportParameters){
//code with stuff to execute
}

我正在尝试从另一个文件调用 createReport() 并将参数传递给它,但我无法弄清楚。我已经尝试过这样的事情,但它不正确:

createReport("Summary", "Title", "Test Report", "Author", "Test User", "Color", Green");

我可以传入“Summary”的reportName 值,但我不知道如何正确传入reportParameters 的Map 值。 对于reportName 值,我应该有一个“Summary”字符串值,然后reportParameters 应该是这些对:

Title = Test Report
Author = Test User
Color = Green

如何正确地将 Map 参数值传递给此方法?

【问题讨论】:

    标签: java dictionary automation


    【解决方案1】:

    如果您尝试拨打 createReport,您有 3 个选项:

    Map.of

    createReport("Summary", Map.of("Title", "Test Report", ....));
    

    您可以在其中堆放多少个 args 是有限制的,但数量不少。

    ImmutableMap.builder

    这需要在你的项目中添加 guava 依赖:

    ImmutableMap.<String, String>builder()
       .put("title", "Test Report")
       .build()
    

    只要需要,你就可以做到。

    老子做个地图

    var map = new HashMap<String, String>();
    map.put("Title", "Test Report");
    .... more put statements
    createReport("Summary", map);
    

    结束语

    这很不像java。你不能用一堆字符串来表示一个对象。你用一个定义来代表它们。这会更好:

    import lombok.*;
    
    @Value @Builder
    class Report {
        String name;
        String title;
        @Singular List<String> authors;
        Color color;
    }
    

    注意:使用Project Lombok

    【讨论】:

    • 好的,我可以使用 Map.of 添加值。工作得很好。谢谢!
    【解决方案2】:

    你需要传递一张地图,而不是一堆字符串。

    String par1 = ...
    Map<String, String> par2 = ...
    ...
    createReport(par1, par2)
    

    【讨论】:

      【解决方案3】:

      您不需要将值传递给您需要创建地图的地图。由于 map 是一个接口,因此您需要实例化一个实现它的类。我将使用 HashMap 作为示例(请记住,HashMap 是一个类而不是一个接口,这才是重点)。 所以: Map&lt;String, String&gt; myMap = new HashMap&lt;String, String&gt;(); 似乎泛型可能值得您研究,因为它看起来是造成混乱的原因。

      【讨论】:

        【解决方案4】:

        如果您使用的是 Java 9,则可以使用 static factory mathod Map.of()

        createReport("Summary", Map.of("Title", "Test Report", "Author", "Test User", "Color", " Green"));
        

        如果您使用的是 Java 8,则必须在调用方法之前构造一个 Map 实例

        Map<String, String> reportParameters = new HashMap<>();
        reportParameters.put("Test Report", "Author");
        reportParameters.put("Author", "Test User");
        reportParameters.put("Color", " Green");
        
        createReport("Summary", reportParameters);
        

        【讨论】:

          猜你喜欢
          • 2019-05-14
          • 2017-01-27
          • 1970-01-01
          • 2018-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多