我正在根据语言和地区设置区域设置,并希望使用此设置解析 BigDecimal 数字。但我面临的问题是两个 OpenJDK 的分组分隔符不同。
下面是我尝试使用 OpenJDK 8 和 OpenJDK 11 执行的示例代码。
Locale l = new Locale.Builder().setLanguage("de").setRegion("CH").build();
System.out.println("Locale set to " + Locale.getDefault(Locale.Category.FORMAT));
DecimalFormat nf = (DecimalFormat)NumberFormat.getInstance(Locale.getDefault(Locale.Category.FORMAT));
System.out.println("Grouping Separator: " + nf.getDecimalFormatSymbols().getGroupingSeparator());
Run Code Online (Sandbox Code Playgroud)
输出
OpenJDK 8
---------
Locale set to de_CH
Grouping Separator: '
OpenJDK 11
----------
Locale set to de_CH
Grouping Separator: ’
Run Code Online (Sandbox Code Playgroud)
我需要一个通用的解析方法,其中分组分隔符返回相同,以便设计我的单元测试很容易,并且无论是使用 java 8 还是 11 运行它都会通过。请协助。
我有三个字符串列表。现在我需要确保一个元素只出现在这三个列表之一中。我不想在列表中重复。您可以假设每个列表中没有重复项。
我尝试使用removeIf()及其服务于我的目的。我确定这不是最好的方法。在 Java 8+ 中有没有其他方法可以做到这一点?
列表的优先级是 list1 > list2 > list3
List<String> list1 = Stream.of("23","45","655","43","199").collect(Collectors.toList());
List<String> list2 = Stream.of("13","23","54","655","111","13").collect(Collectors.toList());
List<String> list3 = Stream.of("76","45","33","67","43","13").collect(Collectors.toList());
list2.removeIf(i->list1.contains(i));
list3.removeIf(i->list1.contains(i) || list2.contains(i));
System.out.println(list1);
System.out.println(list2);
System.out.println(list3);
Run Code Online (Sandbox Code Playgroud)
输出低于预期
[23, 45, 655, 43, 199]
[13, 54, 111, 13]
[76, 33, 67]
Run Code Online (Sandbox Code Playgroud) 我正在尝试从列表创建一个 Map,而 Map 的值将是某种转换的结果,这就是我的代码的样子。
empIdList.stream()
.map(id-> getDepartment(id))
.collect(Collectors.toMap(id, department:String -> department)
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我希望将其id用作键和department值。你能帮我实现我的预期结果吗?
我有两个枚举如下
第一的
public enum firstEnum {
ALL_PRODUCT,
SPECIFIC_COLLECTION,
SPECIFIC_PRODUCT
}
Run Code Online (Sandbox Code Playgroud)
第二
public enum secondEnum {
PRODUCT,
COLLECTION,
PRODUCT
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个通用方法来将一种类型转换为另一种类型,如下所示
public record EnumCasting() {
public <E1,E2> E2 CastOneEnumToAnother(E1 enumFirst, E2 enumSecond) {
return // some logic to convert
}
}
Run Code Online (Sandbox Code Playgroud)
不知道我怎么能做到这一点,任何帮助将不胜感激。 firstEnum.ALL_Product should return secondEnum.Product, firstEnum.SPECIFIC_COLLECTION should return secondEnum.COLLECTION
有代码:
AtomicInteger a1 = new AtomicInteger();
AtomicInteger a2 = new AtomicInteger();
for (int i = 0; i < 100; i++) {
new Thread(()->{
for (int j = 0; j < 1e4; j++) {
a1.incrementAndGet();
a2.incrementAndGet();
int v2 = a2.decrementAndGet();
if(v2>a1.get()){
System.out.println("error a2 > a1");
}
a1.decrementAndGet();
}
}).start();
}
Run Code Online (Sandbox Code Playgroud)
为什么存在 println error a2 > a1?
谢谢!
| 行动 | a1 | a2 |
|---|---|---|
| a1+ | 1 | 0 |
| a2+ | 1 | 1 |
| a2- | 1 | 0 |
| a1- | 0 | 0 |
用 redhat windows openjdk-1.8.0.222
我正在使用 java 流,但遇到了问题。我有这个代码:
clients.stream()
.map(Client::getDescription)
.map(x -> x.substring(x.lastIndexOf("_v")))
.map(x -> x.substring(2))
.mapToInt(Integer::parseInt)
.max()
.getAsInt();
Run Code Online (Sandbox Code Playgroud)
每个客户端的描述可能是“John_abc_v1”、“Bill_crce_v2”、“Joe_ghhj_V3”……我得到了最大值,在这种情况下是 3……但问题是 v 可以是小写或大写,而我没有知道如何解决,所以这行不工作 .map(x -> x.substring(x.lastIndexOf("_v"))),我得到String index out of range -1的时候“V”是大写的。我该如何解决?任何反馈都将受到赞赏。
这是我想要做的:
我找不到一种简单的方法来转换2021-07-07为2021-07-07T00:00:00.000Z. 我们当然可以附加T00:00:00.000Z字符串,但我想避免这种情况。
到目前为止,我拥有的每种方法(使用 LocalDate、LocalDateTime、Instant、Date)都涉及使用时区 (ZoneId) 或转换为 Epoch,它们最终只给出响应直到几秒钟而不是几毫秒。
我相信一定有更简单的方法。
编辑 1:传递区域 ID 不是问题,我们可以做到。
我正在将我的一个项目从 JDK8 迁移到 JDK11,但是其中一个单元测试失败了,尽管我想出了如何在 JDK11 中解决此问题的解决方案,但我不知道其背后的原因。如果有人向我解释这一变化,我真的很感激。这是适用于 JDK8 但不适用于 JDK11 的 HashSet:
Set<String> func(Properties p, String s) {
Set<String> set = p.stringPropertyNames();
set.removeIf(s -> !s.startsWith(s));
return set;
}
Run Code Online (Sandbox Code Playgroud)
我不得不像这样更改 HashSet 初始化以使我的测试运行并通过 JDK11:
Set<String> set = new HashSet<>(p.stringPropertyNames());
Run Code Online (Sandbox Code Playgroud)
我不明白为什么我必须在 JDK11 中像这样更改初始化,此更改是否打算在 JDK11 中使用?
错误堆栈跟踪:
null
java.lang.UnsupportedOperationException
at java.base/java.util.Collections$UnmodifiableCollection.removeIf(Collections.java:1089)
Run Code Online (Sandbox Code Playgroud) Map在 Java 中创建标准很容易。
Map<Integer, String> map = new HashMap<>();
map.put(1, "Name 1");
map.put(2, "Name 2");
Run Code Online (Sandbox Code Playgroud)
现在我需要“扩展”这种标准映射方法,以便每个键可以表示多个值,例如:
Map<Integer, String, String, String> map = new HashMap<>();
map.put(1, "Name 1", "Address 1", "ZIP Code 1");
map.put(2, "Name 2", "Address 2", "ZIP Code 2");
Run Code Online (Sandbox Code Playgroud)
是否有任何“标准”实现或库提供这样的功能?我知道例如 Apache Commons MultiValuedMap( https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/MultiValuedMap.html ) 但这似乎不适合上述用途案件。
我正在尝试找到具有最大长度的 java 给定属性的字符串。我会将属性名称作为字符串传递给方法,该方法将返回最大长度的字符串值。
class Employee {
private String name;
private String designation;
private List<Address> address;
private ContactInfo contactInfo;
....
getter setter
}
class Address {
private String city;
private String state;
private String country;
......
getter setter
}
class ContactInfo {
private String mobileNumber;
private String landlineNumber;
....
getter setter
}
Run Code Online (Sandbox Code Playgroud)
我有一些数据如下:
ContactInfo contactInfo = new ContactInfo("84883838", "12882882");
Address address1 = new Address("city111", "state111", "country111");
Address address2 = new Address("city111111", "state11112", "country1112");
Employee employee1 = new Employee("xyz", "uyyy", List.of(address1, address2), …Run Code Online (Sandbox Code Playgroud) java ×10
java-8 ×10
java-stream ×3
java-11 ×2
atomic ×1
collections ×1
enums ×1
generics ×1
hashset ×1
jvm ×1
lambda ×1
locale ×1
openjdk-11 ×1
string ×1