如何将值传递到地图中?

How do I pass values into a map?

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

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 参数值正确传递到此方法中?

你需要传递一个映射,而不是一堆字符串。

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

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

如果您尝试致电 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

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

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

如果你使用的是Java8你必须在调用方法之前构造一个Map实例

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

createReport("Summary", reportParameters);