我刚刚s在下面的lambda表达式中替换为_:
s -> Integer.parseInt(s)
Run Code Online (Sandbox Code Playgroud)
Eclipse编译器说:
'_'不应该用作标识符,因为它是源级别1.8的保留关键字.
我没有在JLS§3.9词汇结构/关键词中找到任何解释.
Stream作为非终端操作,如何检查a 是否为空并抛出异常(如果不是)?
基本上,我正在寻找与下面的代码等效的东西,但没有实现中间的流.特别是,在终端操作实际消耗流之前不应进行检查.
public Stream<Thing> getFilteredThings() {
Stream<Thing> stream = getThings().stream()
.filter(Thing::isFoo)
.filter(Thing::isBar);
return nonEmptyStream(stream, () -> {
throw new RuntimeException("No foo bar things available")
});
}
private static <T> Stream<T> nonEmptyStream(Stream<T> stream, Supplier<T> defaultValue) {
List<T> list = stream.collect(Collectors.toList());
if (list.isEmpty()) list.add(defaultValue.get());
return list.stream();
}
Run Code Online (Sandbox Code Playgroud) 如何将LocalDate转换为java.sql.Date?
尝试:
Record r = new Record();
LocalDate date = new Date(1967, 06, 22);
r.setDateOfBirth(new Date(date));
Run Code Online (Sandbox Code Playgroud)
这失败了(不会编译),我能找到的就是Joda时间的东西.
我正在使用Java 8
以下Java代码无法编译:
@FunctionalInterface
private interface BiConsumer<A, B> {
void accept(A a, B b);
}
private static void takeBiConsumer(BiConsumer<String, String> bc) { }
public static void main(String[] args) {
takeBiConsumer((String s1, String s2) -> new String("hi")); // OK
takeBiConsumer((String s1, String s2) -> "hi"); // Error
}
Run Code Online (Sandbox Code Playgroud)
编译器报告:
Error:(31, 58) java: incompatible types: bad return type in lambda expression
java.lang.String cannot be converted to void
Run Code Online (Sandbox Code Playgroud)
奇怪的是标记为"OK"的行编译得很好,但标记为"Error"的行失败了.他们看起来基本相同.
在本网站上为另一个答案编写代码时,我遇到了这样的特点:
static void testSneaky() {
final Exception e = new Exception();
sneakyThrow(e); //no problems here
nonSneakyThrow(e); //ERRROR: Unhandled exception: java.lang.Exception
}
@SuppressWarnings("unchecked")
static <T extends Throwable> void sneakyThrow(Throwable t) throws T {
throw (T) t;
}
static <T extends Throwable> void nonSneakyThrow(T t) throws T {
throw t;
}
Run Code Online (Sandbox Code Playgroud)
首先,我很困惑为什么sneakyThrow对编译器调用是好的.T在没有提到未经检查的异常类型的任何地方时,它推断出什么可能的类型?
其次,接受这是有效的,为什么编译器会在nonSneakyThrow电话中抱怨?它们看起来非常相像.
我有一个列表,Integer list从list.stream()我想要的最大值.什么是最简单的方法?我需要比较器吗?
我试图在我的数据库中设置服务器不可知日期时间,我相信这样做的最佳做法是设置UTC日期时间.我的数据库服务器是Cassandra,Java的db驱动程序只能理解Date类型.
所以假设在我的代码中我使用新的Java 8 ZonedDateTime来获取UTC now(ZonedDateTime.now(ZoneOffset.UTC)),我如何将这个ZonedDateTime实例转换为"遗留"Date类?
java java.util.date datetime-conversion java-8 zoneddatetime
什么是Java 8的默认垃圾收集器?
当我检查JMX Beans时,他们将它显示为新一代的并行收集器和旧一代的旧串行收集器.
根据以下链接文档:Java HashMap Implementation
我对HashMap(或者更确切地说是增强HashMap)的实现感到困惑.我的疑问是:
首先
static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;
static final int MIN_TREEIFY_CAPACITY = 64;
Run Code Online (Sandbox Code Playgroud)
为什么以及如何使用这些常量?我想要一些明确的例子. 他们如何通过这个获得性能提升?
其次
如果您HashMap在JDK中看到源代码,您将找到以下静态内部类:
static final class TreeNode<K, V> extends java.util.LinkedHashMap.Entry<K, V> {
HashMap.TreeNode<K, V> parent;
HashMap.TreeNode<K, V> left;
HashMap.TreeNode<K, V> right;
HashMap.TreeNode<K, V> prev;
boolean red;
TreeNode(int arg0, K arg1, V arg2, HashMap.Node<K, V> arg3) {
super(arg0, arg1, arg2, arg3);
}
final HashMap.TreeNode<K, V> root() {
HashMap.TreeNode arg0 …Run Code Online (Sandbox Code Playgroud) 我遇到了一个奇怪的情况,在静态初始化程序中使用带有lambda的并行流看似永远没有CPU利用率.这是代码:
class Deadlock {
static {
IntStream.range(0, 10000).parallel().map(i -> i).count();
System.out.println("done");
}
public static void main(final String[] args) {}
}
Run Code Online (Sandbox Code Playgroud)
这似乎是此行为的最小再现测试用例.如果我:
代码立即完成.谁能解释这种行为?这是一个错误还是这个意图?
我正在使用OpenJDK版本1.8.0_66-internal.
java-8 ×10
java ×9
java-stream ×3
lambda ×2
converter ×1
deadlock ×1
dictionary ×1
fork-join ×1
generics ×1
hashmap ×1
java-time ×1
sqldatetime ×1
void ×1