小编Nam*_*man的帖子

可选orElse Java中的可选项

我一直在使用Java 8中的新Optional类型,我遇到了似乎是功能上不支持的常见操作:"orElseOptional"

考虑以下模式:

Optional<Result> resultFromServiceA = serviceA(args);
if (resultFromServiceA.isPresent) return result;
else {
    Optional<Result> resultFromServiceB = serviceB(args);
    if (resultFromServiceB.isPresent) return resultFromServiceB;
    else return serviceC(args);
}
Run Code Online (Sandbox Code Playgroud)

这种模式有很多种形式,但归结为在一个可选项上需要一个"orElse",它接受一个生成一个新的可选项的函数,只有当前的一个不存在时才被调用.

它的实现看起来像这样:

public Optional<T> orElse(Supplier<Optional<? extends T>> otherSupplier) {
    return value != null ? this : other.get();
}
Run Code Online (Sandbox Code Playgroud)

我很好奇是否有这样的方法不存在的原因,如果我只是以一种无意的方式使用Optional,以及人们提出了处理这种情况的其他方式.

我应该说,我认为涉及自定义实用程序类/方法的解决方案并不优雅,因为使用我的代码的人不一定知道它们存在.

另外,如果有人知道,这样的方法是否会包含在JDK 9中,我可以在哪里提出这样的方法?对我来说,这似乎是对API的一个相当明显的遗漏.

java lambda optional java-8 java-9

128
推荐指数
5
解决办法
7万
查看次数

How do I check that a Java String is not all whitespaces?

I want to check that Java String or character array is not just made up of whitespaces, using Java?

这是一个非常相似的问题,除了它的Javascript:
如何检查字符串是否包含字符和空格,而不仅仅是空格?

编辑:我删除了关于字母数字字符的位,所以它更有意义.

java string whitespace

125
推荐指数
8
解决办法
15万
查看次数

在Java 9中不推荐使用Observer.我们应该使用什么而不是它?

Java 9问世,Observer已被弃用.这是为什么?这是否意味着我们不应该再实施观察者模式了?

知道什么是更好的选择会很好吗?

java deprecated observer-pattern java-8 java-9

122
推荐指数
4
解决办法
3万
查看次数

无法使用Maven编译简单的Java 10/Java 11项目

我有一个简单的Maven项目:

src
??? main
    ??? java
        ??? module-info.java
pom.xml
Run Code Online (Sandbox Code Playgroud)

pom.xml中:

<groupId>org.example</groupId>
<artifactId>example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>example</name>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>10</release>
            </configuration>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

当我通过构建项目时mvn -X install -DskipTests=true,它失败了:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile (default-testCompile) on project example: Execution default-testCompile of goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile failed.
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) …
Run Code Online (Sandbox Code Playgroud)

java maven java-10 module-info java-11

111
推荐指数
6
解决办法
8万
查看次数

Java 8 LocalDate Jackson格式

对于java.util.Date,当我这样做

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd/MM/yyyy")  
  private Date dateOfBirth;
Run Code Online (Sandbox Code Playgroud)

然后在我发送的JSON请求中

{ {"dateOfBirth":"01/01/2000"} }  
Run Code Online (Sandbox Code Playgroud)

有用.

我应该如何为Java 8的LocalDate字段执行此操作?

我试过了

@JsonDeserialize(using = LocalDateDeserializer.class)  
@JsonSerialize(using = LocalDateSerializer.class)  
private LocalDate dateOfBirth;  
Run Code Online (Sandbox Code Playgroud)

它没用.

有人可以让我知道这是正确的方法吗?

以下是依赖项

<dependency>
    <groupId>org.jboss.resteasy</groupId>
    <artifactId>jaxrs-api</artifactId>
     <version>3.0.9.Final</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.4.2</version>
</dependency>
<dependency>
    <groupId>com.wordnik</groupId>
    <artifactId>swagger-annotations</artifactId>
    <version>1.3.10</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

java json jax-rs resteasy jackson

110
推荐指数
12
解决办法
15万
查看次数

在一行中获取流/列表的最后一个元素

如何在以下代码中获取流或列表的最后一个元素?

哪里data.careasList<CArea>:

CArea first = data.careas.stream()
                  .filter(c -> c.bbox.orientationHorizontal).findFirst().get();

CArea last = data.careas.stream()
                 .filter(c -> c.bbox.orientationHorizontal)
                 .collect(Collectors.toList()).; //how to?
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,获得第一个元素filter并不难.

然而,获得单行中的最后一个元素是一个真正的痛苦:

  • 好像我不能直接从a获得它Stream.(它只对有限流有意义)
  • 这似乎也不能得到像first()last()List接口,这实在是一种痛苦.

我没有看到任何关于不在接口中提供first()last()方法的论据List,因为其中的元素是有序的,而且大小是已知的.

但根据原始答案:如何获得有限的最后一个元素Stream

就个人而言,这是我能得到的最接近的:

int lastIndex = data.careas.stream()
        .filter(c -> c.bbox.orientationHorizontal)
        .mapToInt(c -> data.careas.indexOf(c)).max().getAsInt();
CArea last = data.careas.get(lastIndex);
Run Code Online (Sandbox Code Playgroud)

然而,它确实涉及使用indexOf每个元素,这很可能不是您通常想要的,因为它可能会影响性能.

java list java-8 java-stream

100
推荐指数
5
解决办法
7万
查看次数

ProcessBuilder和Runtime.exec()之间的区别

我正在尝试从java代码执行一个外部命令,但是我注意到Runtime.getRuntime().exec(...)和之间存在差异new ProcessBuilder(...).start().

使用时Runtime:

Process p = Runtime.getRuntime().exec(installation_path + 
                                       uninstall_path + 
                                       uninstall_command + 
                                       uninstall_arguments);
p.waitFor();
Run Code Online (Sandbox Code Playgroud)

exitValue为0,命令终止ok.

但是,有ProcessBuilder:

Process p = (new ProcessBuilder(installation_path +    
                                 uninstall_path +
                                 uninstall_command,
                                 uninstall_arguments)).start();
p.waitFor();
Run Code Online (Sandbox Code Playgroud)

退出值为1001,命令终止于中间,但waitFor返回.

我该怎么做才能解决问题ProcessBuilder

java runtime.exec processbuilder

93
推荐指数
4
解决办法
11万
查看次数

开关盒中的变量范围

我想我不明白示波器如何在开关盒中工作.

有人可以向我解释为什么第一个代码不编译但第二个代码没有编译?

代码1:

 int key = 2;
 switch (key) {
 case 1:
      String str = "1";
      return str;
 case 2:
      String str = "2"; // duplicate declaration of "str" according to Eclipse.
      return str;
 }
Run Code Online (Sandbox Code Playgroud)

代码2:

 int key = 2;
 if (key == 1) {
      String str = "1";
      return str;
 } else if (key == 2) {
      String str = "2";
      return str;
 }
Run Code Online (Sandbox Code Playgroud)

为什么变量"str"的范围不包含在案例1中?

如果我跳过案例1的声明,则永远不会声明变量"str"...

java switch-statement

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

GRPC与REST有何不同?

我正在阅读GRPC的这个解释,这个图表很有意思:

在此输入图像描述

传输层如何工作?如果它在网络上......为什么它被称为RPC?更重要的是,这与为服务层实现API的REST有何不同(客户端中的类具有发出http请求的方法)?

rest grpc

90
推荐指数
3
解决办法
5万
查看次数

Java中的"代码太大"编译错误

Java中的代码是否有任何最大大小?我写了一个超过10,000行的函数.实际上,每一行都为数组变量赋值.

arts_bag[10792]="newyorkartworld";
arts_bag[10793]="leningradschool";
arts_bag[10794]="mailart";
arts_bag[10795]="artspan";
arts_bag[10796]="watercolor";
arts_bag[10797]="sculptures";
arts_bag[10798]="stonesculpture"; 
Run Code Online (Sandbox Code Playgroud)

在编译时,我收到了这个错误:代码太大了

我该如何克服这个问题?

java arrays compiler-errors code-size

85
推荐指数
5
解决办法
6万
查看次数