标签: java-8

重用Java的闭包/匿名类来获得性能?

当我使用匿名类进行小型操作(如过滤集合)时,会在Java 8中为新的匿名类实例或闭包进行内存分配.

String firstNonEmpty = Lists.find(list, new Predicate<String>(){
     public String apply(String s){ return !s.isEmpty();}
});
Run Code Online (Sandbox Code Playgroud)

我应该在Java 8中重用这样的谓词或闭包吗?始终/循环/无GC方法?

java performance closures anonymous-class java-8

1
推荐指数
1
解决办法
415
查看次数

使用Java 8,迭代地图中所有条目的最简洁方法是什么?

使用新Java 8迭代Map中所有条目的最简单方法是什么?

java lambda map java-8

1
推荐指数
1
解决办法
183
查看次数

Java 8中数字与字符串长度的比率

我过去一直在阅读有关Java 8的内容,我知道它支持流,但我还没有对它进行过那么多的研究.

我想知道我的代码在Java 8中有多清晰.

我有以下内容:

public static float ratioNumbers(final String input) {
    int countNumbers = 0;
    for (char c : input.toCharArray()) {
        countNumbers += (c >= '0' && c <= '9') ? 1 : 0;
    }
    return countNumbers * 1.0f / input.length();
}
Run Code Online (Sandbox Code Playgroud)

写这个最简洁的方法是什么?仍然保持适当的意图.

java java-8

1
推荐指数
2
解决办法
217
查看次数

为什么流不能识别我的类型?

public class ActivityInventoryMem<Activity> extends TreeSet<Activity> implements ActivityInventory<Activity> {

  @Override
  public ToDo toDo( LocalDate date ) {
    Stream<Activity> s = this.parallelStream();

    s.filter( a ->  a.completed() );
    return new ToDo();
  }
}
Run Code Online (Sandbox Code Playgroud)

这是例外

java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: java.util.stream.Stream.filter
at com.lm.infrastructure.memory.ActivityInventoryMem.toDo(ActivityInventoryMem.java:16)
at com.lm.infrastructure.memory.ActivityInventoryMemNGTest.testToDo(ActivityInventoryMemNGTest.java:46)
Run Code Online (Sandbox Code Playgroud)

我在jdk 8中运行它,我把以下内容放入我的内容中pom.xml,它现在似乎认出了lambda的

    <!-- maven-compiler-plugin -->
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
Run Code Online (Sandbox Code Playgroud)

问题(从我从netbeans收集到的)是它a只是一个Object不是Activity因为它无法看到.completed(),我怎么能解决这个问题呢?

java lambda filter java-8 java-stream

1
推荐指数
1
解决办法
350
查看次数

如何在TreeTableView中显示行的网格线

我有以下FXML:

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="600.0" prefWidth="1000.0" stylesheets="@../css/fxmlDemo.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fxmldemo.controller.MainController">
    <children>
        <TreeTableView fx:id="treeTableView" prefHeight="600.0" prefWidth="1000.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" xmlns:fx="http://javafx.com/fxml">
            <columns>
                <TreeTableColumn fx:id="nameColumn" prefWidth="600.0" text="Name" />
                <TreeTableColumn fx:id="sizeColumn" prefWidth="100.0" text="Size" />
                <TreeTableColumn fx:id="lastModifiedColumn" prefWidth="300.0" text="Modified" />
            </columns>
        </TreeTableView>
    </children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)

在我的fxmlDemo.css文件中,我尝试过以下方法:

* { 
  -fx-border-style: solid;
}
Run Code Online (Sandbox Code Playgroud)

tree-table-view { 
  -fx-border-style: solid;
}
Run Code Online (Sandbox Code Playgroud)

tree-item { 
  -fx-border-style: solid;
}
Run Code Online (Sandbox Code Playgroud)

第一个在FXML中围绕一切边界,另外两个什么都不做.

我想要的是显示网格线像Excel电子表格.我正在使用的代码与示例中看到的代码非常相似,但我的代码已被修改为实际工作:)

以下是Java FX CSS参考指南的链接,但它不包含有关TreeTableView或其子组件的信息.

java-8 fxml javafx-8

1
推荐指数
3
解决办法
6664
查看次数

Java 8中接口中使用默认方法的意外行为

以下类在运行时打印"M".我有点期待"G".

谁能解释这种行为?

interface G {
    default void print() {
        System.out.println("G");
    }
}
class M {
    public void print() {
        System.out.println("M");
    }
}
class GImpl extends M implements G {}
public class Wierd {
    public static void main(String[] args) {
        G g=new GImpl();
        g.print();
    }
}
Run Code Online (Sandbox Code Playgroud)

default interface java-8

1
推荐指数
1
解决办法
117
查看次数

Java 8以一流公民的身份跳舞吗?

因此,我中的函数程序员喜欢像python这样的语言,它们将函数视为一等公民。看起来Java 8承受了压力,而诸如lambda表达式和方法引用之类的“已实现的”东西则被淘汰了。

我的问题是,Java是否正在使用一流的函数,或者这真的只是语法糖,以减少实现匿名类/接口(如可运行的接口)所需的代码量?(我的肠子说后者)。

我理想的情况

Map<String,DoubleToDoubleFunc> mymap = new HashMap<String,DoubleToDoubleFunc>();
...
mymap.put("Func 1", (double a, double b) -> a + b);
mymap.put("Func 2", Math::pow);
...
w = mymap.get("Func 1")(y,z);
x = mymap.get("Func 2")(y,z);
Run Code Online (Sandbox Code Playgroud)

java first-class-functions java-8

1
推荐指数
1
解决办法
1829
查看次数

是Java 8中任何用途的抽象类

我一直在阅读一些关于新Java 8功能的文章.随着Extension方法的引入,即以default关键字为前缀并提供实现的方法.

我在这里检查了几个问题,人们已经在这里这里询问抽象类和接口的差异,最大的区别似乎是抽象类允许你指定默认实现.

这是否意味着抽象类和接口之间的区别很大程度上是美化的,并且考虑到类可以实现多个接口; 它们在设计和实施方面提供了更大的灵活性.

我可以看到抽象类仍然存在,主要是为了向后兼容旧代码.我是不是正确使用未来的抽象类并仅使用接口?如果不能提供示例,只需在抽象类中定义一些字段就不算数了.我正在寻找一个引人注目的用例,与Interfaces相比,Abstract Classes仍然更适合.

另一方面,纯粹主义者会争辩说,默认实现会污染接口,这些接口应该只指定契约,行为应该总是在Concrete类中(行为的一部分可能在抽象类中).这个论点有什么价值吗?

java oop abstract-class interface java-8

1
推荐指数
1
解决办法
263
查看次数

JDK8中的动态数组

我刚刚开始搞乱Java,作为一名前C/C++普通程序员.我对在JDK8中声明数组的方式很感兴趣.我跟着一本书对我说要把数组声明为对象如下.

    int[] exampleArray = new int[10];
Run Code Online (Sandbox Code Playgroud)

我完全同意将数组用作对象.但是在我的IDE(Netbeans 8)上,我收到一条通知,说"字段示例数组可以是最终的".当我删除new int[10]部分时,我得到正常的编译,没有通知.这是否意味着JDK中的数组是动态分配的?我还没有尝试迭代数组.

根据我在Google上发现的内容,我认为数组是作为链接列表实现的吗?

如果没有,请有人告诉我在Java中正确使用数组.

谢谢

java arrays java-8 netbeans-8

1
推荐指数
1
解决办法
862
查看次数

如何使用 ConcurrentHashMap get 和 put 方法保持原子性?

在多线程环境中,我正在 ConcurrentHashMap 实现上执行 get 和 put 操作。然而,结果却出乎意料。请找到下面的代码和输出。

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

public class Test {

    private static final List<String> bars = Arrays.asList("1","2","3","4","5","6","7","8","9","10");
    private static final String KEY = UUID.randomUUID().toString();
    private static ExecutorService executorService = null;

    public static void main(String[] args) {
        for (int i = 1; i <= 20; i++) {
            executorService = Executors.newFixedThreadPool(2);
            Map<String, AtomicInteger> map = new ConcurrentHashMap<>();
            performMapOps(map);
            executorService.shutdown();
            try {
                while (!executorService.awaitTermination(1, …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading java.util.concurrent java-8

1
推荐指数
1
解决办法
74
查看次数