小编Nam*_*man的帖子

我如何简洁地写一个|| b其中a和b是可选值?

我对任何语言的答案感到满意,但我最终想要用Java解答.(Java 8+很好.不仅限于Java 8.我试图修复标签.)

如果我有两个Optional<Integer>值,我如何简洁地计算等价物a || b,意思是:a如果它被定义; 否则b,如果已定义; 否则empty()

Optional<Integer> a = ...;
Optional<Integer> b = ...;
Optional<Integer> aOrB = a || b; // How to write this in Java 8+?
Run Code Online (Sandbox Code Playgroud)

我知道我可以写a.orElse(12),但如果默认的"值"也是Optional怎么办?

显然,在C#中,运营商??做了我想要的.

functional-programming optional maybe java-8 java-9

10
推荐指数
3
解决办法
445
查看次数

Java Stream Grouping可以收集自定义对象

我有温度等级

class Temperature {
    double minTemp;
    double maxTemp;
    String city;
    String country;
}
Run Code Online (Sandbox Code Playgroud)

我有另一个维护温度集合的类

class Temperatures {
    List<Temperature> temperatures;
}
Run Code Online (Sandbox Code Playgroud)

我想使用streams对countryName进行分组.

我想要的是

public Map<String, Temperatures> temperaturesByCountry()
Run Code Online (Sandbox Code Playgroud)

但我无法使用流将温度作为地图值,我得到的是温度列表.

我的分组实现如下

Map<String, List<Temperature>> result = this.getTemperatures()
                .stream()
                .collect(Collectors.groupingBy(Temperature::getCountry));
Run Code Online (Sandbox Code Playgroud)

我想要Map<String, Temperatures>而不是Map<String, List<Temperature>>

我怎样才能做到这一点.

java grouping hashmap java-8 java-stream

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

如何在Java 8中的两个Streams之间进行搜索

如果我有2个Streams,如下面所示的方法

public Stream<Transaction> getPendingTransaction(Stream<PendingTransaction> pendingTransactionStream,Stream<ProcessedTransaction> processedTransactionStream){ }
Run Code Online (Sandbox Code Playgroud)

我想找到其中存在的所有对象中pendingTransactionStream同样存在于processedTransactionStream基于像一些标准

if transaction.getId()对于存在的Transaction对象是相同的, pendingTransactionStream并且processedTransactionStreamthen该对象是相同的,我们可以在列表中收集它们.

我尝试这样做,但它给出了错误

processedTransactionStream
        .filter( (processedTransaction)->
        {
            pendingTransactionStream.anyMatch(s->s.getTransactionId().equals(processedTransaction.getTransactionId()) );
        } 
        ).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

10
推荐指数
2
解决办法
266
查看次数

在 Java8 中清理数据列表

为了清理数据列表,我创建了一个接受数据列表和要执行的清理操作列表的方法。

public <T> List<T> cleanData(List<T> data, List<Function<T, T>> cleanOps) {
    List<T>dataNew=data.stream().map((str) -> {
        T cleanData = str;
        for(Function<T,T> function:cleanOps) {
            cleanData=function.apply(cleanData);
        }
        return cleanData;
    }).collect(Collectors.toList());
    return dataNew;
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是我们在Collectors.toList()返回一个新列表时再次创建整个列表。我们可以在不使用额外空间的情况下获得相同的结果吗?

下面是调用代码:

public void processData() {
    List<Function<String, String>> cleanOps = new ArrayList<>();
    cleanOps.add(String::toLowerCase);
    cleanOps.add(str -> str.replaceAll(" ", ""));
    List<String> data = new ArrayList<>();
    data.add("John Doe");
    data.add("Jane Doe");
    System.out.println(Arrays.toString(cleanData(data, cleanOps).toArray()));
}
Run Code Online (Sandbox Code Playgroud)

java functional-programming java-8 java-stream

10
推荐指数
2
解决办法
291
查看次数

JShell不会使用Git Bash执行任何操作

我在Windows 上安装了Java9(Oracle网站上当前可用的版本)(Windows 10 x64 Professional,也是最新的,作为vmware虚拟机运行 - > VMware Workstation 12).我添加jdk\bin到用户路径并尝试使用Git Bash执行命令,但即使JShell启动,它也不会在按下后执行任何命令Enter,它只是坐在那里而不做任何事情.

有趣的是,它与Windows的默认命令行完美的作品CMDPowershell.如果我没记错,Git Bash是基于Cygwin的.这可能是什么原因?

此外,它没有直接连接JShell,但我在一台不同的机器上有一些类似的问题,有一些命令行工具,如JHipster(适用于CMD但不适用于GitBash).

必要的截图: -

在此输入图像描述

编辑:使用jshell -v并没有什么区别.此外,使用任何REPL帮助程序命令,/help/help intro使shell也停止.

java git-bash java-9 jshell

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

Java 9:模块路径上可能有2个具有相同名称的模块

是否可以在模块路径上拥有2个具有完全相同名称(但内容略有不同)的模块?

据我所知,Java 9编译器并没有抱怨它.我有2个模块声明如下:

module com.dj.helper {
    exports com.dj.helper;
}
Run Code Online (Sandbox Code Playgroud)

两者都包含com.dj.helper包,但在包内的内容是不同的.然后在我的主应用程序中,我想要导入此模块:

module com.dj {
    requires com.dj.helper;
}
Run Code Online (Sandbox Code Playgroud)

具有相同名称的两个模块都在我的模块路径上.

我希望在编译我的com.dj模块时,编译器会抱怨同一模块存在两次,但事实并非如此.这是否有效地意味着您可以在模块路径上拥有相同jar的2个版本,而Java将不知道使用哪个版本?

java java-9 java-module module-info

9
推荐指数
2
解决办法
1495
查看次数

Java 9 迁移问题 - 包 com.mymodule 在未命名模块中声明,模块“newmodule”不读取它

我创建了一个具有以下结构的多模块项目

    myproject
      |- mymodule
         |- src
            |- main
               |- java
                  |- com
                     |- mymodule
                        |- Util.java

      |-newmodule
         |-src
           |-main
             |-java
               |-com
                 |-newmodule
                    |- Main.java
             |-module-info.java
Run Code Online (Sandbox Code Playgroud)

现在我想使用 Util.java,它是模块化模块 newmodule 中的非模块化代码。我已经在 newmodule 中声明了以下内容

module newmodule {
    requires mymodule;
}
Run Code Online (Sandbox Code Playgroud)

项目编译正常,但 Intellij 显示模块未找到并且包 com.mymodule 在未命名模块中声明,模块“newmodule”不读取它。

如何解决这个问题?

还有一个问题,如果我什至不模块化遗留模块,所有旧的非模块化代码是否在默认情况下都会变成 java 9 中的自动模块?

java migration java-9 java-module unnamed-module

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

使用Lombok的@Builder注释时出现Javadoc“找不到符号”错误

我有一堂课,如下所示:

@Data
@Builder
public class Foo {
    private String param;

    /** My custom builder.*/
    public static FooBuilder builder(String _param){
        return builder().param(_param);
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[错误]无法在项目foo上执行目标org.apache.maven.plugins:maven-javadoc-plugin:2.10.4:javadoc(default-cli):JavaDocs报表生成中发生错误:
[错误]退出代码: 1-/home/workspace/foo/src/main/java/com/foo/Foo.java:34:错误:找不到符号
[ERROR]公共静态FooBuilder builder(String _param)
[ERROR] ^
[ERROR]符号: FooBuilder类
[错误]位置:Foo类

java javadoc maven lombok maven-javadoc-plugin

9
推荐指数
2
解决办法
1508
查看次数

peek() 和 allMatch() 如何在 Java 8 Stream API 中协同工作

我发现了一个关于 peek 方法的 Java 8 Stream API 的测验,如下所示

Arrays.asList("Fred", "Jim", "Sheila")
      .stream()
      .peek(System.out::println)
      .allMatch(s -> s.startsWith("F"));
Run Code Online (Sandbox Code Playgroud)

输出是

Fred
Jim
Run Code Online (Sandbox Code Playgroud)

我很困惑这个流是如何工作的?我的预期结果应该是

Fred
Jim
Sheila
Run Code Online (Sandbox Code Playgroud)

peek() 方法是一个中间操作,它处理 Stream 中的每个元素。谁能给我解释一下。

java java-8 java-stream

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

Java Records 是否真的通过类似的类声明来节省内存,或者它们更像是语法糖?

我希望 Java 14 记录实际上比类似的数据类使用更少的内存。

他们或内存使用相同吗?

java memory-footprint java-14 java-record

9
推荐指数
2
解决办法
734
查看次数