【问题标题】:When and why we must use Lambda and List in testing Java selenium? What is the difference?何时以及为什么必须在测试 Java selenium 时使用 Lambda 和 List?有什么区别?
【发布时间】:2022-02-04 13:53:18
【问题描述】:

在Java selenium 自动化中什么时候使用List、lambda 比较好? 用 lambda 代替 List 有什么区别吗?

List<WebElement> links = driver.findElements(By.tagName("a")); // Here is List is collection

    System.out.println(links.size());

    //Printing link text using for..each loop(Before Java8)

    for (WebElement link : links) {

        System.out.println(link.getText());

    }

    //Printing link text using lambda expression

    links.forEach(link -> System.out.println(link.getText()));

    //Processing elements using stream -> filter

    long workingLinks=links.stream().filter(link->link.getAttribute("href")!=null).count();

    System.out.println("Working link:"+workingLinks);

【问题讨论】:

    标签: java selenium


    【解决方案1】:

    Java 流

    在 Java 中使用 streams 有几个好处,例如,可以灵活地在更抽象的级别编写函数,这有助于将紧凑的函数编写成更少、更易读的代码行,并且它们更容易提供并行化。 Stream API 的核心是用于处理对象集合,其中流是支持各种方法的对象序列,这些方法可以通过流水线方式产生所需的结果。

    Java 流的几个特性如下:

    • 流不是数据结构,而是从集合、数组和/或 I/O 通道获取输入。
    • Streams 不会更改原始数据结构,它们仅根据流水线方法提供结果。
    • 每个中间操作都是延迟执行并返回一个流作为结果,因此可以流水线化各种中间操作。终端操作标记流的结束并返回结果。

    流上的操作

    中间操作:

    • ma​​p:map 方法用于返回一个流,该流由将给定函数应用于该流的元素的结果组成。

      List number = Arrays.asList(2,3,4,5);
      List square = number.stream().map(x->x*x).collect(Collectors.toList());
      
    • 过滤器:过滤器方法用于根据作为参数传递的谓词选择元素。

      List names = Arrays.asList("Reflection","Collection","Stream");
      List result = names.stream().filter(s->s.startsWith("S")).collect(Collectors.toList());
      
    • sorted:sorted方法用于对流进行排序。

      List names = Arrays.asList("Reflection","Collection","Stream");
      List result = names.stream().sorted().collect(Collectors.toList());
      

    终端操作:

    • collect:collect方法用于返回对流执行的中间操作的结果。

      List number = Arrays.asList(2,3,4,5,3);
      Set square = number.stream().map(x->x*x).collect(Collectors.toSet());
      
    • forEach:forEach 方法用于遍历流的每个元素。

      List number = Arrays.asList(2,3,4,5);
      number.stream().map(x->x*x).forEach(y->System.out.println(y));
      
    • reduce:reduce 方法用于将流的元素缩减为单个值。 reduce 方法以 BinaryOperator 作为参数。

      List number = Arrays.asList(2,3,4,5);
      int even = number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i);
      

      这里ans变量被赋值为0作为初始值,并添加了i。


    参考文献

    您可以在以下位置找到几个工作示例:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-03
      • 2011-10-19
      • 2016-03-21
      • 2015-03-02
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多