我有一个 Person 类:
@Data
public class Person {
private Integer id;
private String status;
}
Run Code Online (Sandbox Code Playgroud)
我有一个名为 personList 的人员列表:
[{
"id": null,
"status": "inactive"
},
{
"id": 2,
"status": "inactive"
},
{
"id": null,
"status": "active"
}]
Run Code Online (Sandbox Code Playgroud)
现在我需要找到所有状态为“非活动”的人,无论该人是否有 Id。如果某人没有 Id,但状态为“活跃”,则也包括该人。我正在使用 Java 流进行过滤:
List<Person> inactivePersonList =
personList.stream()
.filter(person -> person.getStatus().equals("inactive"))
.filter(person -> person.getId() == null && person.getStatus().equals("active"))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
直播后的结果是没人接听。第一个人没有被选中,因为它没有通过第二个过滤器,最后一个人没有被选中,因为它没有通过第一个过滤器。
我想我可以通过使用 将两个过滤器合二为一来修复它OR,但我试图使每个过滤器变得简单,所以在我进行更改之前,我想问一下是否有更好的方法来做到这一点。谢谢。
我正在尝试用阶乘计算尾随零的数量。
例如
4!= 24 所以你检索到 0。
9!= 362880 所以你检索 1。
10!= 9!x 10 = 3628800 所以你检索 2。
11!= 10!x 11 = 3.99168E7 所以你检索 2。
static double factorial(double n) {
double f = 1;
for(int i = 1 ; i <= n ; i++) {
f *= i;
}
return f;
}
static int numberOfZeros(double f) {
int ten = 1;
int count = 0;
for(;f%Math.pow(10, ten) == 0;count++) {
ten++;
}
return count;
}
Run Code Online (Sandbox Code Playgroud)
这个代码是好的,直到数字 n 是 22。但是当我尝试将 23 放入然后计数是 …
我想使用 Java 8 使用多个if和else语句来简化下面的代码。有没有办法使用一些 Java 8 功能来完全摆脱它们,例如Optional?我试图在这里找到一些东西,但找不到答案。
LocalDateTime beDate = someDate;
LocalDateTime aeDate = someDate;
LocalDateTime eDate;
if (beDate == null && aeDate == null) {
eDate = null;
}
else if (beDate != null && aeDate == null) {
eDate = beDate;
}
else if (beDate == null && aeDate != null) {
eDate = aeDate;
}
else if (beDate != null && aeDate != null &&
(beDate.isEqual(aeDate) || beDate.isBefore(aeDate))) {
eDate = …Run Code Online (Sandbox Code Playgroud) 在 Java 中,我们知道类加载器是一个 JVM 系统,它将类加载到 JVM 中执行。当我运行一个简单的 Java 类时,它会被运行时系统加载和执行。在这里,我没有对类加载做任何事情。但是我可以看到,有很多项目在编写自定义类加载器或增强现有的类加载器。请让我知道需要类加载器增强或新类加载器的生产时间用例。
运行它会给我以下错误,我错过了什么?
public static void main(String[] args) {
DateTimeFormatter _timestampFomatGMT = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
LocalDateTime localDateTime = LocalDateTime.parse("20200331094118137",_timestampFomatGMT);
System.out.println(localDateTime);
}
Run Code Online (Sandbox Code Playgroud)
给了我以下例外。我错过了什么?
Exception in thread "main" java.time.format.DateTimeParseException: Text '20200331094118137' could not be parsed at index 0
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDateTime.parse(LocalDateTime.java:492)
at cotown.lib.common.util.JavaTimeUtil.main(JavaTimeUtil.java:90)
Run Code Online (Sandbox Code Playgroud) 我有两个函数调用 Employee 和 Address DAO 类,我在其中检查员工姓名或地址是否已被使用
为了使检查和抛出异常通用,我创建了以下通用函数
checkOrElseThrow在CommonUtil.java
public static <R, C, T extends Throwable> R checkOrElseThrow(R rtn, C chk, Supplier<? extends T> ex) throws T
{
if (chk != null)
{
throw ex.get();
}
return rtn;
}
Run Code Online (Sandbox Code Playgroud)
上面的通用函数在EmployeeDAO.java和AddressDAO.java 中被调用,如下所示
checkAndReturnEmployee在EmployeeDAO.java
public Employee checkAndReturnEmployee(Employee employee) {
return checkOrElseThrow(
employee,
employee.getAddressName(),
() -> new EntityNotFoundException("Employee already in use for another address"));
}
Run Code Online (Sandbox Code Playgroud)
checkAndReturnAddress在AddressDAO.java
public Address checkAndReturnAddress(Address address) {
return checkOrElseThrow(
address, …Run Code Online (Sandbox Code Playgroud) 我的问题可能不清楚,所以让我举例说明一下:
Arrays.sort(arr, new Comparator<String>(){
public int compare(String a, String b){
return (b + a).compareTo(a + b);
}
});
Run Code Online (Sandbox Code Playgroud)
我想使用 Comparator.comparing。我尝试了以下方法:
Arrays.sort(arr, Comparator.comparing((a, b) -> (b + a).compareTo((String)a + b)));
Run Code Online (Sandbox Code Playgroud)
我收到一个错误 - lamdba 表达式中的返回类型错误。如何解决这个问题?
我正在尝试了解 LocalDate 和 LocalDateTime。由于它们不携带时区信息,它如何在两个不同时区的 now() 中工作。
例子:
服务器 1(EST 时区):
LocalDateTime.now() -> 2020-04-06T23:00:00.040 LocalDate.now()。-> 2020-04-06
服务器 2(UTC 时区):
LocalDateTime.now() -> 值是多少?本地日期.now()。-> 价值是多少?(美国东部时间注意,执行时间是晚上 11 点)
另外,如果我将下面的日期字符串转换为 LocalDateTime 然后再转换为 LocalDate,结果会是什么?
2020-04-06T23:00:00.000
我正在尝试从数组下方构造一个 HashMap
product: [
{
id: 12345
qty: 5
},
{
id: 12345
qty: 6
},
{
id: 98765
qty: 10
}
]
Run Code Online (Sandbox Code Playgroud)
代码:
HashMap<Long, Integer> productMap = new HashMap<>();
int totalQty = 0;
for (Product product : products) {
Long id = product.getId();
if (productMap.containsKey(id)) {
productMap.put(id, totalQty + productMap.get(id).intValue());
} else {
productMap.put(id, totalQty);
}
}
Run Code Online (Sandbox Code Playgroud)
从上面的方法中,我正在检查地图中的键,如果是,则通过覆盖现有键将 qty 添加到 totalQty 中,任何在对值求和时不覆盖的最佳方法?
我想做这样的事情
SortedMap<Integer, String> stuff = new TreeMap<Integer, String>({1:"a",2:"b"});
Run Code Online (Sandbox Code Playgroud)
很像您在 python 中所做的那样,但在 Java 中是可能的,还是调用 .put() 两次的唯一方法?
java ×10
java-8 ×10
datetime ×2
arrays ×1
classloader ×1
comparator ×1
factorial ×1
if-statement ×1
java-stream ×1
jvm ×1
lambda ×1
largenumber ×1
localdate ×1
math ×1
optional ×1
sortedmap ×1
spring ×1
spring-boot ×1
supplier ×1
throwable ×1
timezone ×1
utc ×1