如何从数据表中动态检索数据?

时间:2019-01-03 14:03:56

标签: java cucumber

我有一个像这样的数据表:

|quotes|
|quote_a|
|quote_b|
|quote_c|

我想检索数据表中的所有这些引号,并将它们传递到json请求正文中。现在,我知道如何通过data.get(0)data.get(1)data.get(2)来抓取每个单独的项目,但这并不是真正的动态。

我想使用一种动态的方式来检索数据表中的所有引号,并用逗号将它们放在远处,然后将所有引号放在正文中。

如何更改以下内容以实现此目的?

@When("^get quote)
    public void getQuotes(DataTable dataTable)
        throws Throwable
{

        List<List<String>> data = dataTable.raw();
        List<String> quotesList = new ArrayList<>();
        for (String quotesStr : data) {
            quotesList.add(quotesStr);
        }

        requestSpecificationFacade.body("{\n" +
           " \"quoteId\": " + data.get(0) + ", " + data.get(1) + ", " + data.get(2) +  "\n" +
                                            "}");


        }

1 个答案:

答案 0 :(得分:0)

如果我正确理解,您有一个字符串列表,并希望将其动态转换为以逗号(和空格)分隔的单个字符串。

您可以使用带有String.join Java 8 来完成此操作:

String output = String.join(", ", data);
requestSpecificationFacade.body("{\n" +
                   " \"quoteId\": " + output +  "\n" +
                                                    "}");

或将 Java 7 StringBuilder一起使用:

StringBuilder outputBuilder = new StringBuilder();
for (String quote : data) {
    outputBuilder.append(quote);
    outputBuilder.append(", ");
}
String output = outputBuilder.toString();

// Remove last comma
output = output.substring(0, output.length() - ", ".length());

requestSpecificationFacade.body("{\n" +
           " \"quoteId\": " + output +  "\n" +
                                            "}");

在两种情况下,output将返回quote_a, quote_b, quote_c