Tag: java 8

在Java 8中使用TemporalAmount或TemporalUnit有什么区别?

我在Java 8中编写了一些使用时间算术的代码。 我意识到我可以在不同的方面实施。 让我们看看下面的简单代码。 当然它是相同的结果,但我混淆了哪种方式主要应用或最有效地在Java 8中进行算术运算? LocalTime time = LocalTime.now(); // 1st way LocalTime plusOp = time.plus(Duration.ofMinutes(10L)); // 2nd way LocalTime plusOp2 = time.plus(10L, ChronoUnit.MINUTES); System.out.println(plusOp); System.out.println(plusOp2); // 3. way simply time.plusMinutes(10L); 提前致谢。

如何使用Lambda Expression获得单词平均长度

我有一个单词列表文本文件,我想从该文件中获取最小,最大和平均单词长度。 我有一个流方法: public static Stream readWords(String filename) { try { BufferedReader reader = new BufferedReader(new FileReader(filename)); Stream stringStream = reader.lines(); return stringStream; } catch (IOException exn) { return Stream.empty(); } } 在我的主要测试方法中,我打印最大和最小 System.out.println(readWords(filename) .min(Comparator.comparing(s -> s.length())) .get() .length() ); System.out.println(readWords(filename) .max(Comparator.comparing(s -> s.length())) .get() .length() ); 它按预期工作。 问题: 是否有可能像我在min和max中那样得到单词长度的平均值? 在是或否的情况下,如何做到这一点(仅作为Lambda表达式)?

不可分裂的分裂器

我试图了解Spliterator工作原理以及spliterator的设计方式。 我认识到trySplit()可能是Spliterator更重要的方法之一,但是当我看到一些第三方Spliterator实现时,有时我看到他们的分裂器无条件地为trySplit()返回null。 问题: 普通迭代器和Spliterator之间是否存在无条件返回null的Spliterator ? 似乎这样的分裂者击败了分裂的点。 当然,有一些合法的分裂器用例在trySplit()上有条件地返回null,但是有一个合理的spliterator用例无条件地返回null吗?

Java流减少

我有以下示例数据集,我想根据方向的值使用Java流api进行转换/缩减 Direction int[] IN 1, 2 OUT 3, 4 OUT 5, 6, 7 IN 8 IN 9 IN 10, 11 OUT 12, 13 IN 14 至 Direction int[] IN 1, 2, OUT 3, 4, 5, 6, 7 IN 8, 9, 10, 11 OUT 12, 13 IN 14 到目前为止我写的代码 enum Direction { IN, OUT } class […]

java-8过滤列表而不创建新列表

我正在寻找一种最简单的方法来过滤Java-8中的列表,使用简单的lambda Predicate , 而无需创建新列表 。 特别是,这个解决方案不合适,因为toList()返回一个新的List : List beerDrinkers = persons.stream() .filter(p -> p.getAge() > 16) .collect(Collectors.toList()); 请注意,以下解决方案也不起作用,因为列表应该是原始值的clear() ed(但很明显,如果在过滤之前清除它,则没有任何内容可以过滤…): persons.stream() .filter(p -> p.getAge() > 16) .forEach((p) -> persons.add(p)); (另外,我更喜欢不涉及使用第三方库或框架的解决方案)

为什么Map.compute()采用BiFunction

我不明白为什么Map.compute()和Map.computeIfPresent()采用BiFunction参数以及Map.computeIfAbsent() Function : V compute(K key, BiFunction remappingFunction) V computeIfPresent(K key, BiFunction remappingFunction) V compute(K key, BiFunction remappingFunction) V computeIfPresent(K key, BiFunction remappingFunction) V computeIfAbsent(K key, Function mappingFunction) V computeIfPresent(K key, BiFunction remappingFunction) V computeIfAbsent(K key, Function mappingFunction) 我期待一个普通的Function Function Function ,将旧值映射到新值,resp。 Supplier Supplier为新值。 调用者已经拥有密钥(第一个参数),因此函数或供应商已经可以使用它。 我找到的所有例子都不使用密钥。 我想到的原因: 关键必须(有效) final – 这很容易管理 有一些花哨易用的方法参考 但我不相信这些是这种设计的可行原因。 你有什么想法?

Java 8对静态方法与实例方法的引用

说我有以下代码 public class A { int x; public boolean is() {return x%2==0;} public static boolean is (A a) {return !a.is();} } 而在另一堂课…… List a = … a.stream().filter(b->b.isCool()); a.stream().filter(A::is); //would be equivalent if the static method is(A a) did not exist 问题是如何使用A :: is类型表示法引用实例方法版本? 非常感谢

是否可以将JavaFX的WebView更改为Chrome

我们正在尝试创建一个使用html5 canvas打开url的桌面应用程序。 我们使用Java 8 JavaFX实现了它。 但是我们在渲染草图时遇到了不好的反应。 这在Chrome浏览器中运行良好。 是否可以在JavaFx应用程序中嵌入chrome浏览器?

创建一个方法,接受可变长度的Function参数,可能有不同的类型

假设我有一个字符串: String s = “1,2,3,4,5,6” 。 我想创建一个方法combineFunctions() ,它将Function s的可变长度序列作为参数,并按该顺序应用所有操作。 这些函数可能有不同的类型。 这种function的示例用法如下: Combine c = new Combine(s); List numbers = c.combineFunctions(splitByComma); Integer max = c.combineFunctions(splitByComma,convertToInt, findMax); 我尝试了什么(这里的在这里没什么用处): public void combineFunctions( Function… functions) { } 但我坚持要获得Function的最后一个类型。 我也在考虑递归方法,但varargs参数必须是最后一个。 是否有可能在Java中实现这样的方法?

Java 8中的递归lambda表达式

我只想递归地定义一个Java 8 lambda表达式。 Lambda FAQ提到只能在(静态)字段初始化期间定义递归lambda表达式。 但是我在IntelliJ中遇到编译器错误(javac只报告没有消息的错误): java:初始化程序中的自引用 如果我尝试写类似的东西: static UnaryOperator f = i -> i == 0 ? 1 : i * f.apply( i – 1); 要么 UnaryOperator f = i -> i == 0 ? 1 : i * f.apply( i – 1); 我发现使其工作的一种方法是使用数组来引用lambda有效地欺骗java编译器: import java.util.function.UnaryOperator; public class RecursiveLambdaExample { public static void main(String[] […]