Java中如何将Stream获取到的值赋给String变量?

问题描述 投票:0回答:2

这与使用 Selenium 和 Java 的自动化测试有关。

我正在获取列表中一列的所有元素。

在此之后,我想使用流获取上述列表的第一个元素,使用 substring() 仅获取该元素/字符串的前 4 个字符,然后我需要将其存储在 String 变量中以执行进一步的操作。

如果我尝试将其存储在变量中,则会出现以下错误 - “类型不匹配:无法从 void 转换为 String”

public class SeleniumEasyLandingPage {

 @FindBy(xpath = "//table/tbody/tr/td[3]")
    List<WebElement> assigneeColumn;

public void assigneeColumnOperations() {
        // below line is to print all of the elements in above list using stream - this is working fine
    assigneeColumn.stream().forEach(s->System.out.println(s.getText()));
    
        // below line is to print only first 4 characters of first element of above list - This is also working fine
    assigneeColumn.stream().limit(1).forEach(s->System.out.println("First Element - First Name:"+s.getText().substring(0, 4)));

        // below line is to store the above value in a String variable which gives error -
        String firstElementName=assigneeColumn.stream().limit(1).forEach(s->System.out.println("First Element - First Name:"+s.getText().substring(0, 4)));
        
    }

}

错误是 - “类型不匹配:无法从 void 转换为 String”

java selenium-webdriver java-stream automation-testing
2个回答
0
投票

您需要使用

findAny
Stream
方法从中获取单个值。

就您而言,您甚至不需要流。只需使用

assigneeColumn.get(0)
即可获取列表的第一个值。


0
投票

如果您查看

Stream.foreach()
的文档,您会发现此方法接受
Consumer
并返回
void

在您的语句中,您尝试将

void
分配给
String
变量

String firstElementName = assigneeColumn.stream().limit(1).forEach(s-> System.out.println(...));

这就是编译器向您发出信号的原因

类型不匹配:无法从 void 转换为 String

如果要检索第一个元素或其前四个字符,只需使用

get()
检索第一个元素,然后将
substring()
应用于结果。

// read first element
String firstElementName2 = assigneeColumn.get(0);

// read first 4 characters of the first element
String firstElementName2 = assigneeColumn.get(0).substring(0, 4);

或者,如果你确实想使用流,你可以写:

// read first element
String firstElementName = assigneeColumn.stream().limit(1).findFirst().orElseThrow(() -> new RuntimeException("No elements found"));

// read first 4 characters of the first element
String firstElementName = assigneeColumn.stream().limit(1).findFirst().orElseThrow(() -> new RuntimeException("No elements found")).substring(0, 4);
© www.soinside.com 2019 - 2024. All rights reserved.