我有以下代码:
<table class="table table-bordered">
<?php foreach($details as $detail):?>
<tr>
<td>
<input class="chkSelect" type="checkbox" value="<?php echo $detail['OrderId'];?>" name="checkbox">
<td>
<?= $detail['OrderId']?>
</td>
<td>
<?= $detail['CustomerName']?>
</td>
<td>
<?=$detail['Address']?>
</td>
<td>
<?=$detail['ZipCode']?>
</td>
<td>
<?=$detail['FinanicalStatus']?>
</td>
<td>
<?=$detail['Payment']?>
</td>
<td>
<select class="courier"> <!--Change this to class-->
<option>(choose one)</option>
<option value='1'>Bluedart</option>
<option value='2'>Delhivery</option>
<option value='3'>DTDC</option>
<option value='4'>IndiaPost</option>
</select>
</td>
</tr>
<?php endforeach; ?>
</table>
将其转换为使用Java 8 public boolean isImageSrcExists(String imageSrc) {
int resultsNum = 0;
List<WebElement> blogImagesList = driver.findElements(blogImageLocator);
for (WebElement thisImage : blogImagesList) {
if (thisImage.getAttribute("style").contains(imageSrc)) {
resultsNum++;
}
}
if (resultsNum == 2) {
return true;
} else {
return false;
}
}
s?
当我尝试使用Stream
时,我收到错误,因为map()
不是getAttribute
。
Function
答案 0 :(得分:12)
您无法完全按照自己的意愿行事 - 方法参考中不允许使用显式参数。
但你可以......
...创建一个方法,该方法返回一个布尔值并将调用编码为getAttribute("style")
:
public boolean getAttribute(final T t) {
return t.getAttribute("style");
}
这将允许您使用方法ref:
int a = (int) blogImagesList.stream()
.map(this::getAttribute)
.filter(s -> s.contains(imageSrc))
.count();
...或者你可以定义一个变量来保存函数:
final Function<T, R> mapper = t -> t.getAttribute("style");
这将允许您简单地传递变量
int a = (int) blogImagesList.stream()
.map(mapper)
.filter(s -> s.contains(imageSrc))
.count();
......或者你可以讨论并结合上述两种方法(这肯定是可怕的过度杀伤)
public Function<T,R> toAttributeExtractor(String attrName) {
return t -> t.getAttribute(attrName);
}
然后,您需要致电toAttributeExtractor
以获取Function
并将其传递到map
:
final Function<T, R> mapper = toAttributeExtractor("style");
int a = (int) blogImagesList.stream()
.map(mapper)
.filter(s -> s.contains(imageSrc))
.count();
虽然,实际上,简单地使用lambda会更容易(正如你在下一行所做的那样):
int a = (int) blogImagesList.stream()
.map(t -> t.getAttribute("style"))
.filter(s -> s.contains(imageSrc))
.count();
答案 1 :(得分:7)
您无法将参数传递给方法引用。您可以改为使用lambda表达式:
int a = (int) blogImagesList.stream()
.map(w -> w.getAttribute("style"))
.filter(s -> s.contains(imageSrc))
.count();