You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:15:42