以下陈述的含义是什么:
String joined = elements.stream()
.map(Object::toString)
.collect(Collectors.joining(", "));
据我了解,Stream.map
接受Function
类型的参数。
我不明白Object::toString
是如何传递的以及它是如何工作的?
感谢。
答案 0 :(得分:1)
如何传递
Object::toString
及其工作原理?
它被称为方法参考,您要告诉使用现有的toString
方法定义(来自Object
类)map
方法,而不是在obj -> obj.toString()
方法中明确调用map
。
我建议您查看here并了解方法引用在Java8中的工作原理。
答案 1 :(得分:0)
如何将方法引用或函数传递给我自己的方法?
在某些情况下,我需要做同样的事情。
private String getStringValuesFromList(List<Integer> myClassIds) {
List<MyClass> myObjects = myClassService.find(myClassIds);
if (CollectionUtils.isNotEmpty(myObjects)) {
return myObjects
.stream()
.map(MyClass::getName)
.sorted()
.collect(Collectors.joining(", "));
}
return StringUtils.EMPTY;
}
private String getOtherClassStringFromIds(List<Integer> myOtherClassIds) {
List<MyOtherClass> myOtherClasses= myOtherClassService.find(myOtherClassIds);
if (CollectionUtils.isNotEmpty(myOtherClasses)) {
return myOtherClassIds
.stream()
.map(p -> new String(p.getLazyLoadedRelation.getName() + " - " + p.getName()))
.sorted()
.collect(Collectors.joining(", "));
}
return StringUtils.EMPTY;
}
private String getMyOtherClassNamesStringFromStrings(List<String> myOtherClassNamesList) {
if (CollectionUtils.isNotEmpty(myOtherClassNamesList)) {
return myOtherClassNamesList
.stream()
.sorted()
.collect(Collectors.joining(", "));
}
return StringUtils.EMPTY;
}
是否可以创建一个方法来获取要传递给地图的参数,这样我就可以创建一个方法来处理流并调用3次。
额外的好处是,如果我将null传递给该方法,则跳过.map()部分
例如(这不会编译,但是希望您能理解我要去的地方。
private String concatenateValues(List<Object> objectList, Function<String, String> mapperValue) {
if (CollectionUtils.isNotEmpty(objectList)) {
return objectList.stream()
.map(mapperValue)
.sorted()
.collect(Collectors.joining(", ");
}
return StringUtils.EMPTY;
}