Tag: java 8

Java流是连续阶段的吗?

我对中间阶段顺序状态有疑问 – 是应用于所有输入流(项)的阶段的操作还是应用于每个流项的所有阶段/操作? 我知道这个问题可能不容易理解,所以我举一个例子。 在以下流处理中: List strings = Arrays.asList(“Are Java streams intermediate stages sequential?”.split(” “)); strings.stream() .filter(word -> word.length() > 4) .peek(word -> System.out.println(“f: ” + word)) .map(word -> word.length()) .peek(length -> System.out.println(“m: ” + length)) .forEach(length -> System.out.println(“-> ” + length + “\n”)); 我对这段代码的期望是它会输出: f: streams f: intermediate f: stages f: sequential? m: 7 […]

是否可以将方法引用转换为MethodHandle?

是否可以将方法引用(例如SomeClass::someMethod )转换为MethodHandle实例? 我想要编译时检查的好处(确保存在类和方法)以及使用MethodHandle API内省方法的能力。 用例:当且仅当请求未被特定方法触发时(我要避免无限递归),我才需要执行代码。 我想进行编译时检查以确保类/方法存在但运行时检查以将调用者与方法进行比较。 那么回顾一下: 是否可以将方法引用转换为MethodHandle ?

年代和周年之间的差异?

Java 8的DateTimeFormatter类有一个方法, ofPattern(String pattern) ,它允许您从Az , az字母的字符串定义格式。 这些例子没有说明y , 年代和Y , 基于周的 年份之间的差异。 它是什么? Symbol Meaning Presentation Examples —— ——- ———— ——- y year-of-era year 2004; 04 Y week-based-year year 1996; 96

使用CompletableFuture处理Java 8供应商exception

请考虑以下代码 – public class TestCompletableFuture { BiConsumer biConsumer = (x,y) -> { System.out.println(x); System.out.println(y); }; public static void main(String args[]) { TestCompletableFuture testF = new TestCompletableFuture(); testF.start(); } public void start() { Supplier numberSupplier = new Supplier() { @Override public Integer get() { return SupplyNumbers.sendNumbers(); } }; CompletableFuture testFuture = CompletableFuture.supplyAsync(numberSupplier).whenComplete(biConsumer); } } class SupplyNumbers […]

IntStream何时实际关闭? SonarQube S2095对IntStream是误报吗?

我使用Java 8流代替许多旧样式for循环来迭代一堆结果并生成摘要统计信息。 例如: int messages = IntStream.rangeClosed(0, 7).map(ids::get).reduce(Integer::sum).getAsInt(); 注意:我知道还有其他方法可以进行上面显示的计数。 我这样做是为了说明我的问题。 我正在使用SonarQube 5.3和Java 3.9插件。 在该配置中,上面的代码行违反了squid规则S2095:“资源应该关闭”。 这是我期望看到AutoCloseable(例如,FileInputStream)被打开但从未关闭的结果。 所以这是我的问题:终端操作是否会reduce关闭流? 应该是? 或者这是鱿鱼规则的假阳性?

JPA懒惰列表上的流

我有这样的列表的JPA实体: @OneToMany(mappedBy = “scadaElement”, orphanRemoval = true) private List elementParameters; 和地图formsElementParameter @ManyToOne @JoinColumn(name = “SCADAELEMENT_ID”) ScadaElement scadaElement; 当我获得带有elementParameters列表的实体并在其上执行流时,什么都不做,即使我使用.size()触发列表但是当我使用for循环执行相同操作时。 System.out.println(“elements size: ” + s.getElementParameters().size()); s.getElementParameters() .stream() .forEach( a -> { System.out.println(“elementId: ” + a.getId()); } ); 是否有任何解决方案使该流工作? 我使用eclipselink作为JPA提供者。

ClassLoader中的Java 8 ScriptEngine

我需要在’不同的类加载器’内部执行一些javascript代码。 如果是java,则每个任务都将在单独的类加载器中运行。 现在我需要这个是javascript。 我是否需要在每个类加载器中创建ScriptEngine新实例,或者可以跨类加载器共享一个实例?

为什么我要在并行流中使用并发特性和collect?

为什么我要在并行流中使用并发特性和collect: List list = Collections.synchronizedList(new ArrayList(Arrays.asList(1, 2, 4))); Map collect = list.stream().parallel() .collect(Collectors.toConcurrentMap(k -> k, v -> v, (c, c2) -> c + c2)); 并不是: Map collect = list.stream().parallel() .collect(Collectors.toMap(k -> k, v -> v, (c, c2) -> c + c2)); 换句话说,不使用此特性会产生什么副作用,它对内部流操作有用吗?

partitioningBy的目的是什么?

例如,如果我打算对某些元素进行分区,我可以执行以下操作: Stream.of(“I”, “Love”, “Stack Overflow”) .collect(Collectors.partitioningBy(s -> s.length() > 3)) .forEach((k, v) -> System.out.println(k + ” => ” + v)); 哪个输出: false => [I] true => [Love, Stack Overflow] 但对我来说, partioningBy只是groupingBy一个子句。 虽然前者接受Predicate作为参数而后者接受Function ,但我只看到一个分区作为正常的分组函数。 所以相同的代码完全相同: Stream.of(“I”, “Love”, “Stack Overflow”) .collect(Collectors.groupingBy(s -> s.length() > 3)) .forEach((k, v) -> System.out.println(k + ” => ” + v)); 这也导致Map<Boolean, List> […]

Java 8 lambdas是编译为内部类,方法还是别的什么?

我今天读了这篇关于lambdas的文章: http://www.infoq.com/articles/Java-8-Lambdas-A-Peek-Under-the-Hood 文章建议,lambda 不是作为anon内部类实现的(由于性能)。 它给出了一个示例,可以将lambda表达式编译为类的(静态)方法。 我试过一个非常简单的片段: private void run() { System.out.println(this); giveHello(System.out::println); } private void giveHello(Consumer consumer) { System.out.println(consumer); consumer.accept(“hello”); } 输出是: sample.Main@14ae5a5 sample.Main$$Lambda$1/168423058@4a574795 hello 所以它不是同一个实例。 它不是一些中央的“Lambda Factory”实例。 那么lambdas是如何实现的?