小编hot*_*oup的帖子

在 Java 8 中使用 Optional.empty 默认 Optional orElse

Java 8 在这里。我需要在两个 POJO 列表中搜索一个字符串,并希望正确使用 Stream/Optional API。

如果名称出现在第一个列表 (" lunches") 中,那么我想返回一个包含它的可选项。否则,如果名称出现在第二个列表 (" dinners") 中,那么我想返回一个包含它的可选项。否则,Optional.empty()如果该名称不存在于任一列表中,我想返回。迄今为止我最好的尝试:

public class Restaurant {

    private String id;
    private String name;
    private List<Food> lunches;
    private List<Food> dinners;

    public Optional<Food> findFoodByName(String name) {

        return Optional.of(lunches.stream()
                                  .filter(food -> food.getName()
                                                      .equalsIgnoreCase(name))
                                  .findFirst())
                       .orElse(dinners.stream()
                                      .filter(food -> food.getName()
                                                          .equalsIgnoreCase(name))
                       .findFirst());
//                     .orElse(null);        TODO: how to return empty optional if neither in 'lunches' nor 'dinners'?

    }

}
Run Code Online (Sandbox Code Playgroud)

谁能帮我在这里越过终点线?

java java-8 java-stream

6
推荐指数
1
解决办法
381
查看次数

IntelliJ 可以在调试模式下运行 Maven 项目,但会忽略断点

我有一个 Java 8/Spring Boot/Maven 应用程序,可以在我的 IntelliJ IDE 中运行。当我单击绿色箭头(下方右上角)时,会显示一个控制台,一切都会正常启动,我可以在浏览器中使用该应用程序,通过curl 访问端点等。

我现在正在尝试让调试器工作。当我停止应用程序,然后通过单击调试器(上面的屏幕截图中播放图标旁边的绿色错误图标)重新启动它时,应用程序再次启动,没有任何问题。问题是,我设置的断点(在运行之前)没有执行!这意味着当应用程序遇到一行设置了断点的代码时,该过程不会暂停,并且我没有看到 IntelliJ 挂在该代码行(等待我采取行动),就像我在其他项目中习惯的那样。

例如,上面的SpringApplication.run(...)方法上设置了一个断点。但是当我在调试模式下启动它时,它只是启动并且永远不会在那一行停止!

这是我对该项目的编辑配置设置:

有什么看起来不对劲吗?我是否需要设置一些不同/特殊的东西才能进行调试?提前致谢。

debugging intellij-idea maven

6
推荐指数
1
解决办法
3966
查看次数

Java 8 添加没有时间段的日期

Java 8 在这里。我正在尝试获取当前Date(现在),为其添加一天,并获得一个Date代表明天的新实例,该实例没有时间组件(只有年、月和日)。我最好的尝试:

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, 1);

Date tomorrow = calendar.getTime();
Run Code Online (Sandbox Code Playgroud)

但是当我打印时tomorrow,它包含一个时间组件(例如Sat Jun 02 14:04:59 EDT 2018:),而我只希望它包含小时/月/分钟/等的归零值(所以:)Sat Jun 02 00:00:00 EDT 2018。我怎样才能做到这一点?归根结底,我只想要一个Date代表明天日期的实例,所以在伪代码中:

Date now = new Date();  // 2018-06-01
Date tomorrow = now.plus(1, DAY); // 2018-06-02
Run Code Online (Sandbox Code Playgroud)

calendar date java-8

5
推荐指数
2
解决办法
5306
查看次数

Gradle Checkstyle插件默认与Google Checks不兼容

请注意:我创建了这个GitHub项目来帮助您准确地解决问题.


Java 8和Gradle 4.6在这里.如果您通过gradle init --type java-libraryGradle Checkstyle插件创建一个新的Java Gradle项目,并将该插件配置为使用Google的Checkstyle XML,它将立即失败:

plugins {
    id 'java-library'
}

apply plugin: 'checkstyle'

dependencies {
    testCompile(
        'junit:junit:4.12'
    )
}

repositories {
    jcenter()
    mavenCentral()
}

checkstyle {
    // Go to the Google Checks link above and paste its
    // contents into checkstyle.xml
    config = rootProject.resources.text.fromFile('buildConfig/checkstyle/checkstyle.xml')
}
Run Code Online (Sandbox Code Playgroud)

使用该配置,运行./gradle clean build产生:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':checkstyleMain'.
> Unable to …
Run Code Online (Sandbox Code Playgroud)

java checkstyle gradle

5
推荐指数
1
解决办法
1421
查看次数

通过 Python3 和 Boto3 将 TTL 添加到 DynamoDB 记录

我有以下 Pyhton3/Boto3 脚本,它连接到 AWS DynamoDB 表并尝试通过循环遍历其所有记录来设置 19 天的 TTL:

#!/usr/bin/env python3
import boto3
import sys
from datetime import datetime, timedelta
from boto3.dynamodb.conditions import Key, Attr

client = boto3.resource('dynamodb')

ttl = 19    # The TTL in number of DAYS

myTable = client.Table('MyTable')

pe = "logId, id, created"
delCount = 0

try:
    response = integrationLogTable.scan(
        ProjectionExpression=pe,
        )
    while 'LastEvaluatedKey' in response:
        response = integrationLogTable.scan(
            ProjectionExpression=pe,
            ExclusiveStartKey=response['LastEvaluatedKey']
            )

        for i in response['Items']:
            # ???

except ClientError as e:
    print(e.response['Error']['Message'])
Run Code Online (Sandbox Code Playgroud)

我正在努力解决如何将 19 天的 TTL …

ttl python-3.x amazon-dynamodb boto3

5
推荐指数
1
解决办法
9762
查看次数

ActiveMQ 命令行:将消息从文件发布到队列?

我有一个使用 ActiveMQ 的应用程序,通常,我通过使用 AMQ 的 Web UI 将消息发送到我的软件正在使用的队列来测试它。

我想对此进行半自动化,并希望 AMQ 的命令行能够通过在命令调用中将该消息作为文本提供,或者理想情况下从文件中读取它来将消息发送到特定队列。

例子:

./activemq-send queue="my-queue" messageFile="~/someMessage.xml"
Run Code Online (Sandbox Code Playgroud)

或者:

./activemq-send queue="my-queue" message="<someXml>...</someXml>"
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

bash activemq-classic

5
推荐指数
2
解决办法
4801
查看次数

Gradle Launch4J EXE 不受 Windows 10 信任

请注意:我在这里创建了这个 GitHub 项目,可以用来完美地重现我所看到的问题。


Java 8尝试通过gradle-launch4j Gradle 插件使用Launch4J来构建 Windows 本机 EXE 应用程序。我正在 Mac 上开发 Java Swing 应用程序,但该应用程序必须在 Windows 10 上作为 Windows EXE 运行。我还使用 ShadowJar 构建我的独立“胖罐子”。

我可以构建我的(Swing)应用程序的 fat jar,然后通过java -jar build/lib/myapp.jar. 启动和运行都没有问题。

这是我的 Launch4J Gradle 配置:

launch4j {
    mainClassName = 'com.example.windows.hello.HelloWindowsApp'
    icon = "${projectDir}/icon.ico"
    jdkPreference = 'jdkOnly'
    initialHeapSize = 128
    jreMinVersion = '1.8.0'
    jreMaxVersion = '1.8.9'
    maxHeapSize = 512
    stayAlive = false
    bundledJre64Bit = true
    bundledJrePath = '../hello-windows/jre8'
}
Run Code Online (Sandbox Code Playgroud)

当我运行时./gradle clean build …

windows launch4j gradle java-8 gradle-plugin

5
推荐指数
1
解决办法
1862
查看次数

如何强制 git 在克隆请求时提示我输入用户名+密码

我正在加入一个新团队,并已成为他们在 GitHub 中的组织的成员,这(至少在 Web UI 中)使我能够完全读取他们的存储库。所以我尝试在本地克隆一个存储库:

  1. 我转到 GitHub 中的存储库,单击“克隆或下载”链接,然后选择“使用 HTTPS 克隆”(这就是我想要的)
  2. 我将克隆 URL 复制到剪贴板
  3. 从我运行的终端git clone https://github.com/<THEIR_ORG>/<THEIR_REPO>.git(其中克隆 URL 是从我的剪贴板粘贴的,我已经验证了几次它是正确的)。这是我所看到的:
$ git clone https://github.com/<THEIR_ORG>/<THEIR_REPO>.git
Cloning into '<THEIR_REPO>'...
remote: Repository not found.
fatal: repository 'https://github.com/<THEIR_ORG>/<THEIR_REPO>.git/' not found
Run Code Online (Sandbox Code Playgroud)

这是该组织下的私人仓库。奇怪的是它甚至没有提示我输入用户名或密码,这表明我以某种方式将本地 git 配置为自动发送与有效的 org/repo 用户名不匹配的用户名,因此它自动让我失败。

我有几个 GitHub 帐户(用于工作和娱乐),在过去的几年里我一直使用这台笔记本电脑来处理所有这些帐户。

所以我问:为什么 git 不提示我输入用户名/密码?我怎样才能强制它提示我?

作为记录,我检查了我的~/.gitconfig文件,内容是:

[core]
        excludesfile = /Users/myuser/.gitignore_global
[difftool "sourcetree"]
        cmd = opendiff \"$LOCAL\" \"$REMOTE\"
        path =
[mergetool "sourcetree"]
        cmd = /Applications/Sourcetree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" …
Run Code Online (Sandbox Code Playgroud)

git macos github

5
推荐指数
1
解决办法
6526
查看次数

如何通过 kubectl 列出已安装的 Kubernetes Operator 并删除它们?

如何kubectl列出集群中所有已安装的操作员?例如运行:

kubectl apply -f https://raw.githubusercontent.com/reactive-tech/kubegres/v1.9/kubegres.yaml
Run Code Online (Sandbox Code Playgroud)

安装Kubegres(Postgres 集群提供程序)操作符,但是我如何在操作符列表中实际看到它。同样重要的是,如何通过从集群中卸载操作员kubectl,或者这是不可能的?

kubernetes kubectl

5
推荐指数
1
解决办法
5486
查看次数

Play 控制台错误:Android App Bundle 未签名,并且使用错误的密钥进行签名

我正在尝试将 AAB 上传到 Google Play 控制台,并且需要使用与 Google Play 预期匹配的上传密钥。

我使用 Android Studio 为我生成了一个新的密钥库 ( myapp.jks)。它要求我提供所有域名(DN;OU 等)信息,我假设它使用 OpenSSL 在后台生成自签名证书(?)。

当我用来keytool检查 JKS 内的密钥时(在 Android Studio 生成它之后),我看到它的指纹以1F. 到目前为止,一切都很好。

然后,我使用此密钥库文件签署我的 AAB,并尝试将其上传到我准备好的版本。当我这样做时,我收到错误:

在此输入图像描述

它期望使用以 开头的 SHA1 指纹签名的密钥85,但(正确地)看到我的 AAB 是使用以 开头的 SH1 指纹签名的1F。果然,如果我进入菜单Setup >> App Signing,我会看到 Google Play 期望的上传密钥证书具有以 开头的指纹85

因此,我将提供一个以 开头的 SHA1 指纹密钥1F,这是 Android Studio 为我创建的 JKS。

但我的 Google Play 应用程序帐户需要一个 SHA1 指纹以85.

我在此应用程序签名屏幕上看到“下载证书”链接,但仅下载上传证书,而不下载上传密钥

那么,我到底如何获得上传密钥(以 …

android google-play-console

5
推荐指数
1
解决办法
476
查看次数