首页 > 解决方案 > 如何使用 Java8 返回人员列表而不是字符串?

问题描述

现在,我正在返回一个名称相反的字符串。

public static void main(String[] args) {

    List<Person> personList = new ArrayList<>();

    personList.add(new Person("Jamie", 23, Gender.MALE));
    personList.add(new Person("Tom", 33, Gender.MALE));
    personList.add(new Person("Nancy", 30, Gender.FEMALE));
    personList.add(new Person("Michelle", 10, Gender.FEMALE));

    System.out.println(reverseWordInList(personList));
}

public static String reverseWords(String sentence) {
    return PATTERN.splitAsStream(sentence)
            .map(s -> new StringBuilder(s).reverse())
            .collect(Collectors.joining(" "));
}

但是,我想要一个新的反转值List<String>怎么做?

标签: javaarraylistjava-8java-stream

解决方案


您可以直接使用 中的方法reverseWordsStream<Person>获取List<String>具有相反名称的 。

List<String> names = personList.stream()
                               .map(person -> reverseWords(person.getName())) 
                               .collect(Collectors.toList());

因此,该方法reverseWordInList可能如下所示:

  • Person具体的:

    reverseWordInList(personList);
    ...
    
    static List<String> reverseWordInList(List<Person> personList) {
        return personList.stream()
                         .map(person -> reverseWords(person.getName()))
                         .collect(Collectors.toList());
    }
    
  • 通用的

    reverseWordInList(personList, Person::getName);
    ...
    
    static <T> List<String> reverseWordInList(List<T> list, Function<T, String> getter) {
        return list.stream()
                   .map(t -> reverseWords(getter.apply(t)))
                   .collect(Collectors.toList());
    }
    

请注意,这些方法返回一个列表并且不会修改原始列表。


推荐阅读