如何将值传递到地图中?
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);
我有一个方法正在尝试将值传递到其中。方法是:
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);