获取List Java的特定值

时间:2016-12-20 11:12:02

标签: java list class arraylist

你可以在这里运行在线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 );
}

2 个答案:

答案 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);