当我使用匿名类进行小型操作(如过滤集合)时,会在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 8迭代Map中所有条目的最简单方法是什么?
我过去一直在阅读有关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)
写这个最简洁的方法是什么?仍然保持适当的意图.
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(),我怎么能解决这个问题呢?
我有以下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或其子组件的信息.
以下类在运行时打印"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) 因此,我中的函数程序员喜欢像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 8功能的文章.随着Extension方法的引入,即以default关键字为前缀并提供实现的方法.
我在这里检查了几个问题,人们已经在这里和这里询问抽象类和接口的差异,最大的区别似乎是抽象类允许你指定默认实现.
这是否意味着抽象类和接口之间的区别很大程度上是美化的,并且考虑到类可以实现多个接口; 它们在设计和实施方面提供了更大的灵活性.
我可以看到抽象类仍然存在,主要是为了向后兼容旧代码.我是不是正确使用未来的抽象类并仅使用接口?如果不能提供示例,只需在抽象类中定义一些字段就不算数了.我正在寻找一个引人注目的用例,与Interfaces相比,Abstract Classes仍然更适合.
另一方面,纯粹主义者会争辩说,默认实现会污染接口,这些接口应该只指定契约,行为应该总是在Concrete类中(行为的一部分可能在抽象类中).这个论点有什么价值吗?
我刚刚开始搞乱Java,作为一名前C/C++普通程序员.我对在JDK8中声明数组的方式很感兴趣.我跟着一本书对我说要把数组声明为对象如下.
int[] exampleArray = new int[10];
Run Code Online (Sandbox Code Playgroud)
我完全同意将数组用作对象.但是在我的IDE(Netbeans 8)上,我收到一条通知,说"字段示例数组可以是最终的".当我删除new int[10]部分时,我得到正常的编译,没有通知.这是否意味着JDK中的数组是动态分配的?我还没有尝试迭代数组.
根据我在Google上发现的内容,我认为数组是作为链接列表实现的吗?
如果没有,请有人告诉我在Java中正确使用数组.
谢谢
在多线程环境中,我正在 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-8 ×10
java ×8
interface ×2
lambda ×2
arrays ×1
closures ×1
concurrency ×1
default ×1
filter ×1
fxml ×1
java-stream ×1
javafx-8 ×1
map ×1
netbeans-8 ×1
oop ×1
performance ×1