提问人:Sabo 提问时间:11/15/2023 更新时间:11/15/2023 访问量:43
Java Stream API 查找对象的长度(toString() 的长度)
Java Stream API to find a lenth of object (the length of toString())
问:
我不明白为什么这个代码片段非静态方法不能从静态上下文中引用
people.stream()
.mapToInt(String::length)
.forEach(System.out::println);
原因如下:不存在变量类型的实例,因此 Person 符合 String **
people.stream()
.map(String::length)
.forEach(System.out::println);
相同的逻辑,但执行正确
people.stream()
//.map(Main.Person::toString)
//.mapToInt(String::length)
.mapToInt(person->person.toString().length())
.forEach(System.out::println);
为什么它如此不同,并且 Stream 无法应用操作 String::length?
答:
1赞
Christopher Schneider
11/15/2023
#1
您没有包含完整的示例,但看起来您有此对象:
Collection<Person> people;
如果你在传统的 for 循环中重写你正在做的事情,这就是你要做的事情:
for(Person p : people) {
String personString = (String)p;
System.out.println(personString.length());
}
显然,a 不是字符串,因此编译会失败。Person
如果你想得到长度,你必须做你在第三个例子中所做的。要将其编写为流,您可以执行以下操作:
people.stream()
.map(Person::toString)
.map(String::length)
.forEach(System.out::println);
作为传统循环:
for(Person p : people) {
String personString = p.toString();
System.out.println(personString.length());
}
评论
Person
String
p->p.length()
String.length()
static
p->String.length(p)