小编spa*_*ker的帖子

Java 8中的多个空检查

我有下面的代码,对于多次空检查有点难看.

String s = null;

if (str1 != null) {
    s = str1;
} else if (str2 != null) {
    s = str2;
} else if (str3 != null) {
    s = str3;
} else {
    s = str4;
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用Optional.ofNullable如下所示,但如果有人读取我的代码仍然很难理解.在Java 8中这样做的最佳方法是什么.

String s = Optional.ofNullable(str1)
                   .orElse(Optional.ofNullable(str2)
                                   .orElse(Optional.ofNullable(str3)
                                                   .orElse(str4)));
Run Code Online (Sandbox Code Playgroud)

在Java中9,我们可以使用Optional.ofNullableOR,但在Java8还有没有其他办法?

java lambda optional java-8 java-stream

95
推荐指数
5
解决办法
7263
查看次数

检查映射中与Java中的List内容匹配的键

我有一个ListStringsMap.地图中的每个键都需要出现在列表中,否则我需要抛出异常.截至目前,我正在循环列表并检查密钥并在地图不包含密钥时抛出异常.下面是我正在做的示例代码.在Java8中是否有任何其他方式我们可以在一行中使用streams和使用filters

此外,列表中的内容和地图中的键应匹配.我已经在单独的if条件下处理了.

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestClass {

    public static void main(String[] args) {

        List<String> ll = new ArrayList<>();
        Map<String, Integer> m = new HashMap<>();
        ll.add("a");
        ll.add("b");
        ll.add("d");

        m.put("a", 1);
        m.put("b", 1);
        m.put("c", 1);

        if(ll.size() != m.size){
       System.out.println("Throw Exception");
         }

        for(String s : ll) {

            if(!m.containsKey(s)) {
                System.out.println("Throw Exception");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

13
推荐指数
1
解决办法
887
查看次数

Java 8中的自定义排序映射

我有一个如下地图列表.我想在Java 8中按自定义顺序对列表中的映射进行排序.

例如,下面是地图列表.

[{model=Ferrari},
{model=Tesla},
{model=Benz},
{model=Honda}]
Run Code Online (Sandbox Code Playgroud)

如果我使用下面的代码对上面的地图列表进行排序,它按字母顺序排序.

l.sort(Comparator.comparing((Map<String,String> mp) -> mp.get("model")));
Run Code Online (Sandbox Code Playgroud)

给出下面的输出.

[{model = Benz},{model = Ferrari},{model = Honda},{model = Tesla}]

但是我需要根据顺序排序这张地图(非字母顺序): 本田,特斯拉,奔驰,法拉利

有没有更好的方法我们可以在Java 8中实现自定义排序?

java sorting java-8

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

在 Java 中同时处理 Json 数组并按顺序处理

我需要找到一个解决方案来处理包含 100 万个元素的 Json 数组并尽快写入输出。我选择线程来并发处理数据。但最棘手的部分是我需要按照收到的顺序将数据写入输出。让我用例子来解释我的问题。

假设我有 Json 数组作为输入,它有 10 个元素。我需要先检查每个整数是偶数还是奇数,然后如果是偶数,则每个整数生成 2 行,如果是奇数,则每个整数生成 3 行。该行是格式

序列号_整数

而序列号为每一行递增。下面是产生 10 行输出的 4 个元素的 Json 数组的示例。我正在使用

格森

解析和迭代json数组

[ 1, 2, 3, 4 ]
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我对并发编程很陌生,但我尝试了自己并设法使其产生结果。下面是我的示例代码。

    import com.google.gson.stream.JsonReader;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

public class SampleCheck {
    public static void main(String[] args) throws IOException, InterruptedException {
        String jsonStr = "[ 1, 2, 3, 4 …
Run Code Online (Sandbox Code Playgroud)

java multithreading json gson

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

批处理文件将许多列出的文件移动到一个特定文件夹

我有一个主文件夹,它有多个子文件夹.所有子文件夹都有很多具有不同扩展名的图像(jpg,tif和png).所有子文件夹中的图像总数约为90000张图像.

问题是,我需要在Master文件夹及其子文件夹中搜索大约500个图像,并将图像移动到指定的文件夹.

我尝试使用以下批处理脚本来使用文本文件搜索主文件夹和所有子文件夹,并从列表中移动所有文件并将其粘贴到指定的单个文件夹中. 包含没有扩展名的文件名的文本文件. 但我的批处理脚本不起作用.它没有给我任何错误..但是当我运行它时没有任何反应.

set FIILELIST=C:\padhu\files.txt
set FILESPATH=C:\Padhu\MasterFolder
set DESTPATH=C:\DestinationFolder

for /f %%X in (%FIILELIST%) do call :MOVE_FILES "%%X"
goto :eof

:MOVE_FILES
for /r %FILESPATH% %%I in (%~1) do echo move /qvs "%%I" "%DESTPATH%%%~pnxI"
Run Code Online (Sandbox Code Playgroud)

我是批处理脚本和学习阶段的新手.请帮助我.我非常感谢任何人提供正确的批处理脚本来执行此操作.

windows batch-file

3
推荐指数
1
解决办法
6674
查看次数

从 Java 读取来自 MQ 的所有消息的问题

我开发了一个 Java 应用程序来读取来自 MQ 的消息。Java 应用程序必须从 MQ 读取所有消息,将它们放入列表并返回列表。我正在使用while循环来一一读取消息,如果我捕获到 2033 异常并返回列表,则会中断。

我的问题是我在阅读单条消息后收到 2033 异常。例如,我将大约 10 条消息推送到队列并运行我的应用程序,第一个循环读取第一条消息并将其放入列表中。但是在第二个循环中,它在获取第二条消息时抛出 2033 异常。然后我需要运行应用程序来读取第二条消息,同样的事情发生了。

由于我是 MQ 的新手,因此我找不到路线原因。我正在使用 Java8 和 IBM MQ 核心库。下面是我的代码..

package com.reciever.mq;


import com.ibm.mq.*;
import com.ibm.mq.constants.MQConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.*;


public class MQReceiver {

    private static final Logger LOGGER = LoggerFactory.getLogger(MQReceiver.class);

    private static int GET_OPTIONS_CONSTANT = MQConstants.MQGMO_WAIT |
    MQConstants.MQGMO_PROPERTIES_COMPATIBILITY |
    MQConstants.MQGMO_ALL_SEGMENTS_AVAILABLE |
    MQConstants.MQGMO_COMPLETE_MSG |
    MQConstants.MQGMO_ALL_MSGS_AVAILABLE |
    MQConstants.MQGMO_SYNCPOINT;

    public static MQQueueManager queueManager;

    public static void main(String[] args) throws MQException { …
Run Code Online (Sandbox Code Playgroud)

java ibm-mq

2
推荐指数
1
解决办法
1435
查看次数

在 Hive 中将科学数转换为小数

我想在 Hive 中将具有科学记数法的数字转换为小数,但我得到了错误的输出。我做错的地方..

以下是我要测试的查询。

select cast(-1.36666E2 as decimal(6,1))
Run Code Online (Sandbox Code Playgroud)

我期望输出为-1.36666。但我得到了-136.7

sql hive

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