Tag: java 8

Java 8 – 如何使用带参数函数的谓词?

我有以下代码: public boolean isImageSrcExists(String imageSrc) { int resultsNum = 0; List blogImagesList = driver.findElements(blogImageLocator); for (WebElement thisImage : blogImagesList) { if (thisImage.getAttribute(“style”).contains(imageSrc)) { resultsNum++; } } if (resultsNum == 2) { return true; } else { return false; } } 将其转换为使用Java 8 Stream的正确方法是什么? 当我尝试使用map() ,我得到一个错误,因为getAttribute不是一个Function 。 int a = (int) blogImagesList.stream() .map(WebElement::getAttribute(“style”)) .filter(s -> s.contains(imageSrc)) […]

命名返回流的java方法

是否有返回Stream的方法的命名约定? 我发现唯一提到的就是关于SO的答案 (最后一段),但我不知道它的基础是什么。

使用双冒号 – 静态和非静态方法引用之间的差异

编辑:我的问题在这里得到了解答。 总而言之,我对非静态方法引用的使用感到困惑。 function接口和参考方法具有不同数量的参数。 回答我的问题的是评论和接受的答案。 我目前正在阅读关于流减少方法的Java教程( https://docs.oracle.com/javase/tutorial/collections/streams/reduction.html )。 在那里,我发现了一段我认为错误的代码,所以我做了一个更简单的代码来确保。 // B.java file import java.util.*; public class B { public static void main(String[] args) { List zahlen = new LinkedList(); zahlen.add(1); zahlen.add(2); zahlen.add(3); Averager averageCollect = zahlen.stream() .collect(Averager::new, Averager::addcount, Averager::combine); System.out.println(averageCollect.average()); } } // Averager.java from the official Java tutorial public class Averager { private int total […]

在mapToInt之后调用map是否有任何优势,如果需要的话

我试图计算列表中值的平方和。 以下是三种变体,它们都计算出所需的值。 我想知道哪一个最有效率。 我期待第三个更高效,因为自动装箱只进行一次。 // sum of squares int sum = list.stream().map(x -> x * x).reduce((x, y) -> x + y).get(); System.out.println(“sum of squares: ” + sum); sum = list.stream().mapToInt(x -> x * x).sum(); System.out.println(“sum of squares: ” + sum); sum = list.stream().mapToInt(x -> x).map(x -> x * x).sum(); System.out.println(“sum of squares: ” + sum);

Java流filter值的总和

我有一个名为MonitoredData的类,用于描述一个活动,它的开始时间和结束时间。 属性为activityLabel , startTime , endTime 。 我必须使用流来划分和过滤这些活动,这些活动的总持续时间超过10小时。 我设法计算持续时间的总和,并根据活动将它们分组使用: Map map4 = new HashMap(); map4 = data.stream() .collect( Collectors.groupingBy( MonitoredData::getActivity, Collectors.summingLong(MonitoredData::getDuration) ) ); //getDuration returns end Time – startTime in milliseconds 但我还没有设法添加filter。 我试过用: .filter(Collectors.summingLong(MonitoredData::getDuration) > whatever) 但显然它不起作用。 我如何解决这个问题才能使它返回Map ?

Stream.spliterator对并行流的奇怪行为

我正在使用流分裂器直接用于我正在编写的库中的低级操作。 最近,当我使用流分裂器和交错tryAdvance/trySplit调用时,我发现了非常奇怪的行为。 这是一个简单的代码,演示了这个问题: import java.util.Arrays; import java.util.Spliterator; public class SpliteratorBug { public static void main(String[] args) { Integer[][] input = { { 1 }, { 2, 3 }, { 4, 5, 6 }, { 7, 8 }, { 9 } }; Spliterator spliterator = Arrays.stream(input).parallel() .flatMap(Arrays::stream).spliterator(); spliterator.trySplit(); spliterator.tryAdvance(s -> {}); spliterator.trySplit(); spliterator.forEachRemaining(System.out::println); } } 输出是 […]

如何将OptionalLong映射到Optional ?

我有一个OptionalLong的实例。 但是我的一个库需要一个Optional作为参数。 如何将OptionalLong转换为Optional ? 我梦想着这样的事情: OptionalLong secondScreenHeight = OptionalLong.of(32l); // or: OptionalLong.empty() api.setHeight(secondScreenHeight.maptoRegularOptional()); // .maptoUsualOptional does not exist

mockito:如何匹配java 8中的varargs?

我正在努力将项目从java 7迁移到8,并且在Mockito中遇到编译错误“在”情况下我很难追踪到: when(queryRunner.query(any(String.class), any(ResultSetHandler.class), anyVararg())).thenReturn(mockedWordResultList); 给我一个编译错误: java: reference to query is ambiguous both method query(java.lang.String,java.lang.Object,org.apache.commons.dbutils.ResultSetHandler) in org.apache.commons.dbutils.QueryRunner and method query(java.lang.String,org.apache.commons.dbutils.ResultSetHandler,java.lang.Object…) in org.apache.commons.dbutils.QueryRunner match 在构建1.8.0-b128中发生此错误,但在1.7.0_45中不会发生。 我正在使用mockito 1.9.5。 在java 8中使用anyVarArg()参数匹配的正确方法是什么?

JDK类除了Javadoc之外还有其他任何规范吗?

JDK类除了Javadoc之外还有其他任何规范吗? 如果是这样,在哪里? 例如,考虑Collections.unmodifiableMap 。 它的Javadoc没有提及线程安全性; 所以,从Javadoc开始,我不能认为将结果映射暴露给其他线程是安全的,而不需要采取我自己的一些特殊步骤来获得线程安全性。 但恕我直言,任何现实的实现都会将内部地图存储在final字段中,因此在Java 5及更高版本中,只要内部地图是(在任何访问之间具有“先发生”关系),结果地图将是线程安全的生成的地图以及之前对内部地图的修改)。 例如,这就是OpenJDK实现的function。 那么,我怎么能弄清楚我是否可以轻易地假设一个给定的行为?

java允许使用function接口作为方法吗?

使用新的java lambdas和function接口的概念,是否可以将这些function接口视为方法? interface Func { void execute(int i); } void call(Func f) { f(1); //instead of f.execute(1); } 我发现了很多关于实际lambda表达式语法的信息,但没有任何相关信息。