你可以在这里运行在线java编译器https://www.codechef.com/ide选择java8。
以下是我搜索其他值的代码: 当我搜索“Java”时,我想打印'18'。 此代码将返回:[Person(Java,18)] 我的问题是如何打印'18'?
import java.util.*;
class LinearSearchDemo {
public static void main (String[] args) {
List<Person> list = Arrays.asList(
Person.create("Oscar", 16),
Person.create("Oei", 17),
Person.create("Java", 18)
);
List<Person> result = searchIn( list,
new Matcher<Person>() {
public boolean matches( Person p ) {
return p.getName().equals("Java");
}});
System.out.println( result );
}
public static <T> List<T> searchIn( List<T> list , Matcher<T> m ) {
List<T> r = new ArrayList<T>();
for( T t : list ) {
if( m.matches( t ) ) {
r.add( t );
}
}
return r;
}
}
class Person {
String name;
int age;
String getName(){
return name;
}
int getAge() {
return age;
}
static Person create( String name, int age ) {
Person p = new Person();
p.name = name;
p.age = age;
return p;
}
public String toString() {
return String.format("Person(%s,%s)", name, age );
}
}
interface Matcher<T> {
public boolean matches( T t );
}
答案 0 :(得分:4)
您正在将result
打印到stdout
。此列表中的对象的类型为Person
。这就是Person.toString()
方法用于获取result
的字符串表示。
如评论中所述,更改Person的toString
方法只返回age
的值或迭代结果并将age
的值写入stdout
}。
答案 1 :(得分:2)
方法public static <T> List<T> searchIn( List<T> list , Matcher<T> m )
返回List<T>
,在您的情况下,如果您想要获得人员年龄,则返回人员
试试result.stream().map(Person::getAge).forEach(System.out::println);