标签: java-8

使用Java 8可选 - 转换逻辑

我正在尝试学习如何Optional在Java中使用- 但这似乎不正确我在做什么.

User user = null;

public AuthCheck(User user) throws Exception {
    if (user == null) {
        throw new Exception("No user!");
    }
    if (!(user.getStuff() != null && !user.getStuff().isEmpty())) {
        throw new Exception("User has no stuff");
    }
    this.user = user;
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用Optional以下方法转换它:

Optional<UserOptional> user;

public AuthCheckOptional(Optional<UserOptional> user) throws Exception {
    user.orElseThrow(() -> new Exception("No User!"));

    user.map(UserOptional::getStuff)
        .orElseThrow(() -> new Exception("User has no stuff"));

    this.user = user;
}
Run Code Online (Sandbox Code Playgroud)

我想我不需要两次单独检查.另外我相信我已经改变了逻辑,因为IsEmpty()没有发生.

java exception-handling optional java-8

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

ZonedDateTime的字符串正在改变格式

String ip="2011-05-01T06:47:35.422-05:00";
ZonedDateTime mzt = ZonedDateTime.parse(ip).toInstant().atZone(ZoneOffset.UTC);
System.out.println(mzt);

System.out.println("-----");

String ip2="2011-05-01T00:00:00.000-05:00";
ZonedDateTime mzt2 = ZonedDateTime.parse(ip2).toInstant().atZone(ZoneOffset.UTC);
System.out.println(mzt2);
Run Code Online (Sandbox Code Playgroud)

输出:

2011-05-01T11:47:35.422Z
-----
2011-05-01T05:00Z
Run Code Online (Sandbox Code Playgroud)

为什么在案例2中更改日期格式?由于这个原因,我收到SQLServer数据库错误.

java date java-8 java-time zoneddatetime

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

将if语句压缩成更短更优雅的代码

我有以下if-else块,我想知道是否有更优雅的方式可以编写此代码...我使用的是Java 8

if(valueString != null) {
    return valueString;
}
else if(valueInt != null) {
    return String.valueOf(valueInt);
}
else if(valueFloat != null) {
    return String.valueOf(valueFloat);
}
else if(valueDate != null){
    return String.valueOf(valueDate);
}
else if(valueBit != null) {
    return String.valueOf(valueBit);
}
else {
    return null;
}
Run Code Online (Sandbox Code Playgroud)

java java-8

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

从源代码构建Elasticsearch,但它需要Java 10

我正在尝试从源代码构建Elasticsearch.我今天从GitHub回购克隆,我按照" 从源头构建 "中的说明进行操作.

运行./gradlew assemble会产生以下错误:

...
> Configure project :benchmarks
=======================================
Elasticsearch Build Hamster says Hello!
=======================================
  Gradle Version        : 4.7
  OS Info               : Linux 4.4.0-112-generic (amd64)
  JDK Version           : Oracle Corporation 1.8.0_161 [Java HotSpot(TM) 64-Bit Server VM 25.161-b12]
  JAVA_HOME             : /usr/lib/jvm/java-8-oracle
  Random Testing Seed   : 5554B47DBBCF3CFB
Project evaluation failed including an error in afterEvaluate {}. Run with --stacktrace for details of the afterEvaluate {} error.

FAILURE: Build failed with an exception.

* Where:
Build file …
Run Code Online (Sandbox Code Playgroud)

java elasticsearch java-8 java-10

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

通过Java 8 Streams API进行StringBuilder操作

我正在努力从StringBuilder中删除一些字符.该方法工作正常.但是,我希望通过Java-8流API实现相同的功能.目前的代码很冗长.有没有办法通过Java 8流API重构第二个方法removeCarryReturnsCharacters()?

private static StringBuilder readEntireFileUsingStream(Path filePath) throws IOException {

    StringBuilder data = new StringBuilder(String.valueOf(Files.readAllLines(filePath, StandardCharsets.ISO_8859_1)));

    return removeCarryReturnsCharacters(data);

}

private static StringBuilder removeCarryReturnsCharacters(StringBuilder fileData){

    int endIndex = 1012;
    String needToRemove = "";
    long totDataChunkCount = fileData.length()/1014;
    long delCounter = 1;
    try{
        while (delCounter < totDataChunkCount) {
            needToRemove = fileData.substring(endIndex, endIndex + 2);
            if (needToRemove.equals("^^")) {
                fileData.delete(endIndex, endIndex + 2);
            }
            endIndex += 1012;
            delCounter++;
        }
    }catch(StringIndexOutOfBoundsException exp){
        throw exp;
    }
    return fileData;
}
Run Code Online (Sandbox Code Playgroud)

stringbuilder java-8 java-stream

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

removeIf()的List不工作​​throw - UnsupportedOperationException

当我尝试从列表中删除元素时removeIf(),它正在抛出UnsupportedOperationException

public class T {
        public static void main(String[] args) {
        String[] arr = new String[] { "1", "2", "3" };
        List<String> stringList = Arrays.asList(arr);
        stringList.removeIf((String string) -> string.equals("2"));
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解为什么会发生这种情况,我该如何纠正这个问题?

java arraylist java-8

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

如何使用Java-8将对象转换为地图

考虑以下对象:

class Interval {
   final String name;
   final Date start;
   final Date end;
   final int intervalId;
}
Run Code Online (Sandbox Code Playgroud)

我收到了一份间隔清单.我需要检查它等于给定的地图.例如:

boolean checkEqual(List<Interval> intervals, Map<Date, Date> startEnd) {


}
Run Code Online (Sandbox Code Playgroud)
  1. 我想使用Java8将间隔列表转换为开始/结束日期的映射,然后与startEndMap进行比较

boolean checkEqual(List<Interval> intervals, Map<Date, Date> startEnd) {
       Map<Date, Date> map = intervals.streams.filter ?? is there a way to do it ?
       return map.equals(startEnd)
}
Run Code Online (Sandbox Code Playgroud)

怎么做 ?

  1. 有没有更好的办法 ?

java-8 java-stream

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

Java8 For Each Loop首先跳过Iteration

如何编写代码JAVA8为每个循环跳过第一次迭代.我已经阅读了Stack Overflow中的先前答案.但所有都是Java <8版本.

cars.forEach(car->{
//Skip first then do some thing
})
Run Code Online (Sandbox Code Playgroud)

list java-8

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

LocalDate和DateTimeFormatter的Java 6替代品

在Java 8项目中,我可以这样解析日期:

LocalDate.parse(
    newDateString, 
    DateTimeFormatter.ofPattern(expectedDateFormat) 
)
.format(
    DateTimeFormatter.ofPattern(expectedDBDateFormat)
);
Run Code Online (Sandbox Code Playgroud)

我的问题是,我有一个Java 6的项目,LocalDateDateTimeFormatter没有为Java 6的定义.

如何在Java 6项目中解析日期?

java date-parsing java-6 java-8 java-time

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

Java:将多个字符串日期时间格式解析为 LocalDateTime/Date/Calender

我正在尝试将字符串日期时间解析为JavaLocalDateTimeDate在 Java 中。我可能得到的输入,比如12/21/2020 12:12:12 PM1/12/2020 2:6:8 PM10/2/2020 10:50:8 AM

我尝试在DateTimeFormatter或下DateTimeFormatBuilder可以使用不同类型的模式。蛮力方法我在哪里 硬编码不同的模式组合。这是从链接复制的代码:

import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;

class Main {
    public static void main(String[] args) {
        // many combinations
        final String DATE_FORMATS = "[MM/dd/yyyy HH:mm:ss a][M/dd/yyyy H:mm:ss a]";
        DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(DATE_FORMATS);

        System.out.println(dateFormatter.parse("12/21/2020 11:12:12 AM"));
        System.out.println(dateFormatter.parse("1/12/2020 2:54:55 AM"));
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有其他解决方案,因为我无法控制输入?我可以使用哪个单一模式而Formatter不是多个组合?或者在解析之前接收后修改输入更好吗?

java datetime datetime-format java-8

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