我有以下使用Stream
s的java类,如下所示。我有一个名为person的基本类,然后还有其他类我正在使用Stream
s。
有什么方法可以避免lambdas并删除它们?
public class StreamMapDemo
{
public static void main(String[] args)
{
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", "alice@gmail.com", Gender.FEMALE, 16));
personList.add(new Person("Bob", "bob@gmail.com", Gender.MALE, 15));
personList.add(new Person("Carol", "carol@gmail.com", Gender.FEMALE, 23));
personList.add(new Person("David", "david@gmail.com", Gender.MALE, 19));
personList.add(new Person("Eric", "eric@gmail.com", Gender.MALE, 26));
personList.stream() // Stream<Person>
.map(p -> p.getEmail()) // Stream<String>
.forEach(System.out::println);
System.out.println("\n----------------------\n");
personList.stream() // Stream<Person>
.map(p -> p.getName().toUpperCase()) // Stream<String>
.forEach(System.out::println);
System.out.println("\n----------------------\n");
personList.stream() // Stream<Person>
.mapToInt(p -> p.getAge()) //IntStream
.forEach(age -> System.out.println(age));
}
}
输出
alice@gmail.com
bob@gmail.com
carol@gmail.com
david@gmail.com
eric@gmail.com
----------------------
ALICE
BOB
CAROL
DAVID
ERIC
----------------------
16
15
23
19
26
答案 0 :(得分:1)
您可以使用方法引用而不是lambda表达式:
personList.stream()
.map(Person::getEmail)
.forEach(System.out::println);
personList.stream()
.map(Person::getName)
.map(String::toUpperCase)
.forEach(System.out::println);
personList.stream()
.mapToInt(Person::getAge)
.forEach(System.out::println);
答案 1 :(得分:0)
如果您也不想使用流,则此处使用常规循环的版本,例如过去:
for (final Person person : personList) {
System.out.println(person.getEmail());
}
System.out.println("\n----------------------\n");
for (final Person person : personList) {
System.out.println(person.getName().toUpperCase());
}
System.out.println("\n----------------------\n");
for (final Person person : personList) {
System.out.println(person.getAge());
}
或者总之,如果你想按人分组:
for (final Person person : personList) {
System.out.println(person.getEmail());
System.out.println(person.getName().toUpperCase());
System.out.println(person.getAge());
System.out.println("----------------------");
}
请注意,此版本稍微更改了输出。然而它更快,你只需要一次迭代而不是三次。
然后输出如下:
alice@gmail.com
ALICE
16
----------------------
bob@gmail.com
BOB
15