标签: java-8

可以做些什么来避免在使用 Records 时出现由于自动装箱而导致的隐藏错误

有时我会编写一些小脚本,用于管理数据库中的记录或生成一些用于报告目的的数据。

大多数时候我们使用Long类型作为用户实体的 ID。如果我执行以下操作:

List<Long> listOfLong = Arrays.asList(1L, 2L, 3L);
System.out.println(listOfLong.contains(2));
Run Code Online (Sandbox Code Playgroud)

它返回,false但为此:

System.out.println(integers.contains(2L));
Run Code Online (Sandbox Code Playgroud)

它返回true

我们不应该得到这样的编译时错误吗?

java autoboxing java-8

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

Amazon Corretto 和 Java JDK 之间有什么区别?为什么我们使用 Amazon Corretto 专门开发企业应用程序?

我在一家银行担任开发人员和系统管理员。我有新项目。该项目是关于身份和访问管理。在开发 IAM 应用程序时,我们使用 Java 语言。为此,我购买了 Udemy Java 课程。但是,课程中使用了 Amazon Corretto,我不了解这个 JDK。

  1. 什么是亚马逊 Corretto JDK?

  2. 为什么我们使用 Corretto JDK?

java amazon-web-services java-8 corretto

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

使用 Streams 将嵌套的 for 循环从 Java 7 转换为 Java 8

我有以下嵌套的 for 循环,我需要将其转换为 JAVA 8 流 API 格式

for (EmpInfo empInfo : empInfos) {

  for (AddressInfo address : addressInfos) {

    if (address.getStreetNumber() != null 
      && empInfo.getStreetNumber() != null 
      && address.getStreetNumber().longValue() == empInfo.getStreetNumber().longValue()) {

      empInfo.setStreetName(address.getStreetName());
      empInfo.setStreetZipCode(address.getStreetZipCode());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

有什么建议?

java for-loop java-8 java-stream

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

JUNIT5 中的 AssertThrows

我努力学习assertThrowsjunit5,它需要Executable作为具有第二ARGvoid execute()方法。但是,在下面的示例中,我们正在通过相同的示例传递它,LAMBDA它返回一个带有方法的双精度值double divide(int a , int b)。现在,如果下面的 lambdaexecuteExcecutable. 应该给compile error吧?

assertThrows(ArithmeticException.class,() -> m.divide(1, 0),"Failed");
Run Code Online (Sandbox Code Playgroud)

java junit java-8

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

为什么 ArrayList.remove(char) 自动装箱失败?它将 char 视为 int

我真的很困惑为什么 ArrayList.remove() 会导致堆栈溢出:D

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index 98 out of bounds for length 3
Run Code Online (Sandbox Code Playgroud)

但这不是“C”。char 在语义上更接近 Character 而不是 int。

我的代码(将字符串 s 转换为 t 的最少步骤数):

public class Solution {

    public int minSteps(String s, String t) {
        ArrayList<Character> list = new ArrayList<Character>();
        for (char c : t.toCharArray()) {
            list.add(c);
        }
        System.out.println(list.toString());

        for (char c : s.toCharArray()) {
            System.out.println("trying to remove " + c);
            list.remove(c);
            System.out.println(" result: " + list);
        }
        return list.size();
    }

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

java java-8

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

Java Stream Reduce 方法

reduce 方法在这里实际做什么?我已经阅读了 Oracle 文档,但我仍然不明白这个例子中的 reduce 方法在做什么

public static Coder findCoderWithWorstBMI(List<Coder> coders) {
    return coders.stream().sorted(Comparator.comparing(BMICalculator::calculateBMI))
            .reduce((first, second) -> second).orElse(null);
}

private static double calculateBMI(Coder coder) {
    double height = coder.getHeight();
    double weight = coder.getWeight();
    if (height == 0.0)
        throw new ArithmeticException();
    double bmi = weight / (height * height);
    return Math.round(bmi * 100) / 100.0;
}
Run Code Online (Sandbox Code Playgroud)

java functional-programming list java-8 java-stream

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

Java Lambda 用于在两个 for 循环内中断

我正在尝试将 Java 8 中的迭代代码块转换为函数式。函数式方法无法在共享的集合中找到匹配的消息。

List<Optional<Message>> allMessages = new ArrayList<>();

Set<Status> allStatuses = getAllStatuses();

//Iterative : Working
Set<StatusMessage> set = new HashSet<>(STATUS_MESSAGE.values());
for (StatusMessage statusMessage : set) {
    for (Status status : statusMessage.getStatusAndInfo().keySet()) {
        Optional<Message> message = MessageBuilder.createMessage(allStatuses, status, this::createMessage);
        if (message.isPresent()) {
            allMessages.add(message);
            break;
        }
    }
}

//Functional : Not working  - Never adds anything to the 
//map even when matching status is present
STATUS_MESSAGE.values().stream()
        .distinct()
        .map(statusMessage -> statusMessage.getStatusAndInfo().keySet())
        .flatMap(Collection::stream)
        .map(key -> MessageBuilder.createMessage(allStatuses, key, this::createMessage))
        .anyMatch(allMessages::add);
Run Code Online (Sandbox Code Playgroud)

MessageBuilder.createMessage如下所示:

Optional<Status> …
Run Code Online (Sandbox Code Playgroud)

java collections functional-programming java-8 java-stream

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

如何更新Stream内的局部原始变量?(爪哇)

我正在编写一个代码,其中我需要计算数组中 1 的数量,现在我可以通过循环遍历数组来用旧方法来完成,但我想知道如何使用 Streams 来完成。

int[] arr = {1,2,4,1,5,1}; //example array 
int oneFreq = 0;
Arrays.stream(arr).forEach(x - > {if(x==1) oneFreq++;});
Run Code Online (Sandbox Code Playgroud)

现在这会导致编译时错误:从 lambda 表达式引用的局部变量必须是最终的或有效的最终变量。

是否有任何解决方法来更新流中的局部变量?因为让它成为最终意味着那是不可能的

java java-8 java-stream

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

仅当存在可选项时如何应用条件?

我有一个Optional<LocalDate>对象和一个Stream其他日期。

Stream<LocalDate> dates = ...;   
Optional<LocalDate> dateOptional = ...;
Run Code Online (Sandbox Code Playgroud)

我想过滤掉可选的所有日期。如果可选项不存在,过滤器不应该做任何事情。

我写过Predicate这样的:

Predicate<LocalDate> predicate = date -> !dateOptional.isPresent() || !date.isAfter(dateOptional.get());  
Stream<LocalDate> filteredStream = dates.filter(predicate);
Run Code Online (Sandbox Code Playgroud)

我想避免使用isPresent()get()。是否有更实用的方式来编写相同的逻辑?我正在使用 Java 8。

java predicate optional java-8 java-stream

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

带有 Java 8 lambda 表达式的构建器

如下所述,我有两节课。我想创建两个class A.

我想从现有实例 obj1 创建实例 obj2,并将 a3 属性的更新值为"Java".

我曾尝试使用Builder在下面的行,但它不起作用。

A obj2 = obj1.builder().a3("Java").build();
Run Code Online (Sandbox Code Playgroud)

我可以通过调用构造函数来做到这一点,但我只想做Builder模式。

@Builder(toBuilder = true)
@Data
class A {
    String a1;
    String a2;
    String a3;
    B b;

    A(String b1, String b2, String b3, B b) {
        this.a1 = b1;
        this.a2 = b2;
        this.a3 = b3;
        this.b = b;
    }
}

@Builder
@Data
class B {
    String b1;
    String b2;
    String b3;

    B(String b1, String b2, String b3) {
        this.b1 = …
Run Code Online (Sandbox Code Playgroud)

java builder lombok java-8

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