围绕Integer
vs int
在Java中进行了讨论.前者的默认值是null
后者的默认值0
.Boolean
vs boolean
?怎么样?
我的应用程序中的变量可以有0
/ 1
值.我想使用boolean
/ Boolean
而不想使用int
.我可以使用Boolean
/ boolean
代替吗?
我试图在下面的Collectors.toMap()
调用中为"keyMapper"函数参数提供一个更简洁的表达式:
List<Person> roster = ...;
Map<String, Person> map =
roster
.stream()
.collect(
Collectors.toMap(
new Function<Person, String>() {
public String apply(Person p) { return p.getLast(); }
},
Function.<Person>identity()));
Run Code Online (Sandbox Code Playgroud)
似乎我应该能够使用lambda表达式来内联它,但我无法想出一个编译它的人.(我对lambdas很新,所以这并不奇怪.)
谢谢.
- >更新:
如接受的答案所述
Person::getLast
Run Code Online (Sandbox Code Playgroud)
是我在寻找的东西,也是我尝试过的东西.然而,Eclipse 4.3的BETA_8每晚构建是问题 - 它标记为错误.从命令行编译时(我应该在发布之前完成),它起作用了.所以,是时候用eclipse.org提交bug了.
谢谢.
我写了一个有很多getter的java类..现在我想获取所有getter方法并在某个时候调用它们.我知道有一些方法,比如getMethods()或getMethod(String name,Class ... parameterTypes),但是我只是想得到吸气剂...,使用正则表达式?谁能告诉我?谢谢!
在Java 8中,这适用于:
Stream<Class> stream = Stream.of(ArrayList.class);
HashMap<Class, List<Class>> map = (HashMap)stream.collect(Collectors.groupingBy(Class::getSuperclass));
Run Code Online (Sandbox Code Playgroud)
但这不是:
Stream<Class> stream = Stream.of(List.class);
HashMap<Class, List<Class>> map = (HashMap)stream.collect(Collectors.groupingBy(Class::getSuperclass));
Run Code Online (Sandbox Code Playgroud)
Maps允许null键,List.class.getSuperclass()返回null.但Collectors.grouping可以在Collectors.java第907行发出NPE:
K key = Objects.requireNonNull(classifier.apply(t), "element cannot be mapped to a null key");
Run Code Online (Sandbox Code Playgroud)
如果我创建自己的收集器,它的工作原理改为:
K key = classifier.apply(t);
Run Code Online (Sandbox Code Playgroud)
我的问题是:
1)Collectors的Javadoc.GroupingBy并没有说它不应该映射一个空键.出于某种原因这种行为是否必要?
2)是否有另一种更简单的方法来接受一个空键,而不必创建我自己的收集器?
我怎么能展平Stream
的Map
(同类型)s到一个Map
用Java 8?
Map<String, Long> toMap(Stream<Map<String, Long>> stream) {
return stream. ???
}
Run Code Online (Sandbox Code Playgroud) 我有两个这样的列表实例:
List<NameAndAge> nameAndAgeList = new ArrayList<>();
nameAndAgeList.add(new NameAndAge("John", "28"));
nameAndAgeList.add(new NameAndAge("Paul", "30"));
nameAndAgeList.add(new NameAndAge("Adam", "31"));
List<NameAndSalary> nameAndSalaryList = new ArrayList<>();
nameAndSalaryList.add(new NameAndSalary("John", 1000));
nameAndSalaryList.add(new NameAndSalary("Paul", 1100));
nameAndSalaryList.add(new NameAndSalary("Adam", 1200));
Run Code Online (Sandbox Code Playgroud)
这里NameAndAge
是
class NameAndAge {
public String name;
public String age;
public NameAndAge(String name, String age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + ": " + age;
}
}
Run Code Online (Sandbox Code Playgroud)
并且NameAndSalary
是
private class NameAndSalary {
private String name;
private double …
Run Code Online (Sandbox Code Playgroud) 我正在使用spring-boot开发后端服务。有一种方案可以比较2个bean(一个是DB对象,另一个是客户请求的对象),然后返回“新元素”,“修改后的元素”,如果没有变化,则返回false。2豆格式如下
"sampleList":{
"timeStamp":"Thu, 21 Jun 2018 07:57:00 +0000",
"id":"5b19441ac9e77c000189b991",
"sampleListTypeId":"type001",
"friendlyName":"sample",
"contacts":[
{
"id":"5b05329cc9e77c000189b950",
"priorityOrder":1,
"name":"sample1",
"relation":"Friend",
"sampleInfo":{
"countryCode":"91",
"numberType":"MOBILE",
"numberRegion":"IN"
}
},
{
"id":"5b05329cc9e77c000189b950",
"priorityOrder":1,
"name":"sample2",
"relation":"Friend",
"sampleInfo":{
"countryCode":"91",
"numberType":"MOBILE",
"numberRegion":"IN"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我已经在Java上浏览了有关此方案的bean比较的Internet,但是找不到任何更简单的解决方案,但是找到了一些很酷的JSON解决方案。我可以看到GSON的一些解决方案,但它不会返回包含“新元素”和“变更元素”的客户端对象。有什么方法可以用JSON或JAVA返回更新和修改的元素?您的帮助应该是可观的。对于我来说,即使是提示也将是一个很好的开始。
我有以下代码:
private static <T> Map<String, ?> getDifference(final T a, final T b, final Map<String, Function<T, Object>> fields) {
return fields.entrySet().stream()
.map(e -> {
final String name = e.getKey();
final Function<T, Object> getter = e.getValue();
final Object pairKey = getter.apply(a);
final Object pairValue = getter.apply(b);
if (Objects.equals(pairKey, pairValue)) {
return null;
} else {
return Pair.of(name, pairValue);
}
})
.filter(Objects::nonNull)
.collect(Collectors.toMap(Pair::getKey, Pair::getValue));
}
Run Code Online (Sandbox Code Playgroud)
现在,pairValue可以为null.为了避免这里描述的NPE ,在"收集"时,我希望确保只发送那些非空的值.如果为null,我想发送"".
所以,我尝试用这个替换最后一行:
.collect(Collectors.toMap(Pair::getKey,Optional.ofNullable(Pair::getValue).orElse(""));
Run Code Online (Sandbox Code Playgroud)
以及其他修改:
.collect(Collectors.toMap(pair -> pair.getKey(), Optional.ofNullable(pair -> pair.getValue()).orElse(""));
Run Code Online (Sandbox Code Playgroud)
不编译.我不确定这里需要什么.有帮助吗?
我在Map中有这种值:
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1,"mark");
map.put(2,"1.1");
map.put(3,"google");
map.put(4,"12");
map.put(5,"2.2);
Run Code Online (Sandbox Code Playgroud)
我需要订购此Map,同时订购数字和字符串。
我现在得到的是这个(您可以看到数字不是“有序的”,因为它们是字符串)
1.1
12
2.2
google
mark
Run Code Online (Sandbox Code Playgroud)
我应该得到的是:
1.1
2.2
12
google
mark
Run Code Online (Sandbox Code Playgroud)
我该怎么做?我有点困惑。
java ×9
java-8 ×5
java-stream ×5
hashmap ×2
lambda ×2
boolean ×1
collections ×1
collectors ×1
gson ×1
jackson ×1
json ×1
keyvaluepair ×1
reflection ×1