有时我会编写一些小脚本,用于管理数据库中的记录或生成一些用于报告目的的数据。
大多数时候我们使用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。
我们不应该得到这样的编译时错误吗?
我在一家银行担任开发人员和系统管理员。我有新项目。该项目是关于身份和访问管理。在开发 IAM 应用程序时,我们使用 Java 语言。为此,我购买了 Udemy Java 课程。但是,课程中使用了 Amazon Corretto,我不了解这个 JDK。
什么是亚马逊 Corretto JDK?
为什么我们使用 Corretto JDK?
我有以下嵌套的 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)
有什么建议?
我努力学习assertThrows的junit5,它需要Executable作为具有第二ARGvoid execute()方法。但是,在下面的示例中,我们正在通过相同的示例传递它,LAMBDA它返回一个带有方法的双精度值double divide(int a , int b)。现在,如果下面的 lambdaexecute与Excecutable. 应该给compile error吧?
assertThrows(ArithmeticException.class,() -> m.divide(1, 0),"Failed");
Run Code Online (Sandbox Code Playgroud) 我真的很困惑为什么 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) 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 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) 我正在编写一个代码,其中我需要计算数组中 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 表达式引用的局部变量必须是最终的或有效的最终变量。
是否有任何解决方法来更新流中的局部变量?因为让它成为最终意味着那是不可能的
我有一个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。
如下所述,我有两节课。我想创建两个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 ×10
java-8 ×10
java-stream ×5
autoboxing ×1
builder ×1
collections ×1
corretto ×1
for-loop ×1
junit ×1
list ×1
lombok ×1
optional ×1
predicate ×1