使用Java Streams映射Selenium WebElement列表至自定义类列表遇异常
问题分析与解决
错误原因
你在Stream的map操作中犯了变量引用错误:代码里的element是外部定义的父元素(即调用findElements的那个元素),而非Stream迭代过程中当前的WebElement对象。这导致每次映射都用同一个父元素创建UtgiftElement实例,最终列表里的两个元素都是同一个对象的引用。
正确实现方式
修正后的Stream写法
把map中的参数替换为Stream当前迭代的元素(可以用默认参数名it,也可以显式命名):
val expenseElements = elements.stream() .map { UtgiftElement(it) } // 或者显式命名参数:.map { webElement -> UtgiftElement(webElement) } .collect(Collectors.toList())
更简洁的Kotlin原生写法
既然使用Kotlin,没必要依赖Java Stream,直接用Kotlin集合的map扩展函数更简洁:
val expenseElements: List<UtgiftElement> = elements.map { UtgiftElement(it) }
验证结果
修正后执行,结果会和传统for循环一致:
expenseElements[0].expense() = "Entry 1" expenseElements[1].expense() = "Entry 2"
内容的提问来源于stack exchange,提问作者Frank H.
相关产品推荐
相关产品推荐

