标签: java-8

Java SE 8是否有Pairs或Tuples?

我正在玩Java SE 8中的惰性函数操作,我想要一个对/元组map的索引,然后基于第二个元素,最后只输出索引.i(i, value[i])filtervalue[i]

我是否仍然要忍受这个问题:Java中的C++ Pair <L,R>相当于什么?在lambdas和溪流的大胆新时代?

更新:我提供了一个相当简化的示例,其中有一个由@dkatzel提供的简洁解决方案,其中一个答案如下.但是,它没有概括.因此,让我添加一个更一般的例子:

package com.example.test;

import java.util.ArrayList;
import java.util.stream.IntStream;

public class Main {

  public static void main(String[] args) {
    boolean [][] directed_acyclic_graph = new boolean[][]{
        {false,  true, false,  true, false,  true},
        {false, false, false,  true, false,  true},
        {false, false, false,  true, false,  true},
        {false, false, false, false, false,  true},
        {false, false, false, false, false,  true},
        {false, false, false, false, false, false}
    };

    System.out.println(
        IntStream.range(0, …
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8 java-stream

174
推荐指数
8
解决办法
19万
查看次数

Java"此语言级别不支持lambda表达式"

我正在测试Java 8的一些新功能,并将示例复制到我的IDE(Eclipse最初,然后是IntelliJ),如下所示:http: //docs.oracle.com/javase/tutorial/java/javaOO/examples/RosterTest. java的

Eclipse没有为lambda表达式提供任何支持,并且IntelliJ不断报告错误"在此语言级别不支持Lambda表达式".我想知道这是我的安装,代码或支持的问题.

java lambda intellij-idea java-8

173
推荐指数
9
解决办法
15万
查看次数

CompletableFuture,Future和RxJava的Observable之间的区别

我想知道的区别 CompletableFuture,FutureObservable RxJava.

我所知道的都是异步但是

Future.get() 阻止线程

CompletableFuture 给出了回调方法

RxJava Observable--- CompletableFuture与其他好处相似(不确定)

例如:如果客户端需要进行多次服务调用,那么当我们使用Futures(Java)时Future.get()将按顺序执行...想知道它在RxJava中的表现如何...

文档http://reactivex.io/intro.html

很难使用Futures来优化组合条件异步执行流程(或者不可能,因为每个请求的延迟在运行时会有所不同).当然,这可以完成,但它很快变得复杂(因此容易出错)或者过早地阻塞Future.get(),这消除了异步执行的好处.

真的很想知道如何RxJava解决这个问题.我发现从文档中很难理解.

java multithreading asynchronous java-8 rx-java

173
推荐指数
4
解决办法
5万
查看次数

为什么String.chars()是Java 8中的一个int流?

在Java 8中,有一种新方法String.chars()返回表示字符代码的ints(IntStream)流.我想很多人会期待char这里有一股流.以这种方式设计API的动机是什么?

java string java-8

171
推荐指数
2
解决办法
7万
查看次数

标准Kotlin库中提供了哪些Java 8 Stream.collect等价物?

在Java 8中,Stream.collect允许对集合进行聚合.在Kotlin中,除了作为stdlib中的扩展函数的集合之外,它不以相同的方式存在.但目前尚不清楚不同用例的等价性.

例如,在JavaDocCollectors顶部是为Java 8编写的示例,当将它们移植到Kolin时,在不同的JDK版本上不能使用Java 8类,因此它们应该以不同的方式编写.

在网上显示Kotlin集合示例的资源方面,它们通常是微不足道的,并没有真正与相同的用例进行比较.什么是真正符合Java 8记录的案例的好例子Stream.collect?那里的清单是:

  • 将名称累积到列表中
  • 将名称累积到TreeSet中
  • 将元素转换为字符串并将它们连接起来,用逗号分隔
  • 计算员工工资的总和
  • 按部门分组员工
  • 按部门计算工资总额
  • 将学生分成传球和失败

以上链接的JavaDoc中的详细信息.

注意: 这个问题是由作者故意编写和回答的(答案问题),因此对于常见问题的Kotlin主题的惯用答案存在于SO中.还要澄清为Kotlin的alphas写的一些非常古老的答案,这些答案对于当前的Kotlin来说是不准确的.

java collections java-8 kotlin java-stream

171
推荐指数
2
解决办法
3万
查看次数

泛型返回类型上限 - 接口与类 - 令人惊讶的有效代码

这是来自第三方库API的真实示例,但已简化.

使用Oracle JDK 8u72编译

考虑这两种方法:

<X extends CharSequence> X getCharSequence() {
    return (X) "hello";
}

<X extends String> X getString() {
    return (X) "hello";
}
Run Code Online (Sandbox Code Playgroud)

两者都报告了"未经检查的演员"警告 - 我明白了.困扰我的是我为什么打电话

Integer x = getCharSequence();
Run Code Online (Sandbox Code Playgroud)

它编译?编译器应该知道Integer没有实现CharSequence.打电话给

Integer y = getString();
Run Code Online (Sandbox Code Playgroud)

给出错误(如预期的那样)

incompatible types: inference variable X has incompatible upper bounds java.lang.Integer,java.lang.String
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么这种行为被认为是有效的?它会有用吗?

客户端不知道此调用是不安全的 - 客户端的代码在没有警告的情况下编译.为什么编译器不会警告/发出错误?

另外,它与这个例子有什么不同:

<X extends CharSequence> void doCharSequence(List<X> l) {
}

List<CharSequence> chsL = new ArrayList<>();
doCharSequence(chsL); // compiles

List<Integer> intL = new ArrayList<>();
doCharSequence(intL); // …
Run Code Online (Sandbox Code Playgroud)

java generics java-8

170
推荐指数
2
解决办法
3万
查看次数

lambda表达式是否在每次执行时都在堆上创建一个对象?

当我使用Java 8的新语法糖迭代一个集合时,例如

myStream.forEach(item -> {
  // do something useful
});
Run Code Online (Sandbox Code Playgroud)

这不等同于下面的"旧语法"片段吗?

myStream.forEach(new Consumer<Item>() {
  @Override
  public void accept(Item item) {
    // do something useful
  }
});
Run Code Online (Sandbox Code Playgroud)

这是否意味着Consumer每次迭代集合时都会在堆上创建一个新的匿名对象?这需要多少堆空间?它有什么性能影响?这是否意味着我在迭代大型多级数据结构时应该使用旧样式for循环?

java lambda java-8

166
推荐指数
2
解决办法
3万
查看次数

Java 8 lambda Void参数

假设我在Java 8中有以下功能接口:

interface Action<T, U> {
   U execute(T t);
}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我需要一个没有参数或返回类型的操作.所以我写这样的东西:

Action<Void, Void> a = () -> { System.out.println("Do nothing!"); };
Run Code Online (Sandbox Code Playgroud)

但是,它给了我编译错误,我需要把它写成

Action<Void, Void> a = (Void v) -> { System.out.println("Do nothing!"); return null;};
Run Code Online (Sandbox Code Playgroud)

这很难看.有没有办法摆脱Void类型参数?

java lambda void java-8

165
推荐指数
7
解决办法
14万
查看次数

Intellij - 无法使用较新的Java 8类 - 错误:"使用API​​记录为@since 1.6+ .."

我正在尝试java.lang.function.Function在我的java 8代码库中使用a ,但我在Intellij中不断收到以下错误.

使用API​​记录为@since 1.6+此检查查找在其文档中具有@since标记的方法的所有用法.当在较新的SDK版本下执行开发作为生产的目标平台时,这可能很有用

我似乎有正确的项目和编译器设置

项目设置:(文件 - >项目结构)

Project Settings -> Project -> Project SDK = Java 1.8
Project Settings -> Project -> Project Language Level = 8 - Lambdas, Type Annotations etc
Run Code Online (Sandbox Code Playgroud)

编译器设置:(文件 - >设置)

Build, Execution, Deployment -> Compiler -> Java Compiler -> Project Bytecode Version : 1.8
Build, Execution, Deployment -> Compiler -> Java Compiler -> Per module Bytecode Version -> Target Bytecode Version : 1.8
Run Code Online (Sandbox Code Playgroud)

问题是什么?

intellij-idea java-8

163
推荐指数
4
解决办法
8万
查看次数

可以编译Java 8代码以在Java 7 JVM上运行吗?

Java 8引入了重要的新语言功能,例如lambda表达式.

语言中的这些更改是否伴随着编译的字节码中的这些重大更改,这些更改会阻止它在不使用某些反向转换器的情况下在Java 7虚拟机上运行?

java compatibility jvm java-7 java-8

162
推荐指数
4
解决办法
7万
查看次数