在Java 8中引入Locale.lookup(),基于RFC 4647,允许用户Locale根据优先级列表找到最佳匹配列表LocaleRange.现在我不明白这种方法的每个角落情况.以下公开了一个我想要解释的具体案例:
// Create a collection of Locale objects to search
Collection<Locale> locales = new ArrayList<>();
locales.add(Locale.forLanguageTag("en-GB"));
locales.add(Locale.forLanguageTag("en"));
// Express the user's preferences with a Language Priority List
String ranges = "en-US;q=1.0,en-GB;q=1.0";
List<Locale.LanguageRange> languageRanges = Locale.LanguageRange.parse(ranges);
// Find the BEST match, and return just one result
Locale result = Locale.lookup(languageRanges,locales);
System.out.println(result.toString());
Run Code Online (Sandbox Code Playgroud)
这打印en,我会直观地预期en-GB.
注意:
"en-GB;q=1.0,en-US;q=1.0"(GB和US反转),这将打印en-GB,"en-US;q=0.9,en-GB;q=1.0"(GB的优先级高于美国),这将打印出来en-GB.有人可以解释这种行为背后的理由吗?
我们的应用程序使用初始化代码,这取决于执行静态代码的顺序,我想知道这个顺序是否在所有JVM中都是一致的.
这是我的意思的样本:
public class Main {
static String staticVar = "init_value";
public static void main(String[] args) {
System.out.println(A.staticVar);
staticVar = "mainValue";
System.out.println(A.staticVar);
}
}
public class A {
static String staticVar = Main.staticVar;
}
Run Code Online (Sandbox Code Playgroud)
会给:
init_value init_value
和
public class Main {
static String staticVar = "init_value";
public static void main(String[] args) {
// System.out.println(A.staticVar);
staticVar = "mainValue";
System.out.println(A.staticVar);
}
}
public class A {
static String staticVar = Main.staticVar;
}
Run Code Online (Sandbox Code Playgroud)
会给(在我的环境):
mainValue
总而言之,在所有JVM中,当我们第一次使用类时,是否总是执行静态代码?
我需要Map<Item, Set<Item>>使用JPA2注释来持久保存类型的成员.关系是多对多,Item对象是实体.
我应该创建一个单独的中间实体持有Set<Item>还是直接映射?
如果缺少某些背景,请告知.
有没有人知道一个库,它会将String [] []转换为String表,如下所示?
| title1 | title2 | |________|________| | blah | blih | | blah2 | blih2 | etc...
我可以为此编写格式化的字符串,但它将是非通用代码,与参数相关联.为此目的编写通用代码比我愿意投资的代码更昂贵.
总而言之,我认为图书馆可以证明这一点.
知道这是否存在?
这是一个错误还是一个功能?
NPE下面失败了
Function<String, String> f = null;
Optional.<String>empty().map(f).orElse(null);
Run Code Online (Sandbox Code Playgroud)
但不是
Function<String, String> f = null;
Optional.<String>empty().map(value -> f.apply(value)).orElse(null);
Run Code Online (Sandbox Code Playgroud)
例如,IntelliJ建议用第二个表达式替换第二个表达式作为等价物,这对我来说是有意义的,直到现在.
这种行为的原因是执行Optional#map():
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
// check happens before the branching
Objects.requireNonNull(mapper);
if (!isPresent())
return empty();
else {
return Optional.ofNullable(mapper.apply(value));
}
}
Run Code Online (Sandbox Code Playgroud)
相反,如果map()实施时:
public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
if (!isPresent())
return empty();
else {
// the check happens only when relevant
Objects.requireNonNull(mapper);
return Optional.ofNullable(mapper.apply(value));
}
}
Run Code Online (Sandbox Code Playgroud)
我们会在前两个片段之间获得一致的行为.任何理由 …