JDK1.8 Stream

1.Streams filter() and collect() 进行过滤数据和收集数据

按照正常的方式过滤数据   

ist<String> lines = Arrays.asList("spring", "node", "mkyong");
List<String> result = getFilterOutput(lines, "mkyong");
for (String temp : result) {
	System.out.println(temp);	//output : spring node
}

    //...
    private static List<String> getFilterOutput(List<String> lines, String filter) {
        List<String> result = new ArrayList<>();
        for (String line : lines) {
            if (!"mkyong".equals(line)) {
                result.add(line);
            }
        }
        return result;
    }

JDK1.8之后过滤数据的方式 

import java.util.stream.Collectors;

//...
                List<String> lines = Arrays.asList("spring", "node", "mkyong");

		List<String> result = lines.stream() 			//convert list to stream
			.filter(line -> !"mkyong". equals (line))	//filters the line, equals to "mkyong"
			.collect(Collectors.toList());			//collect the output and convert streams to a List

		result.forEach(System.out::println);			//output : spring node        

 

2. Streams filter(), findAny() and orElse()
按照正常方式,通过名字获取对象
ist<Person> persons = Arrays.asList(new Person("mkyong"),
	new Person("michael"), new Person("lawrence"));

Person result = getStudentByName(persons, "michael");

//...
    private Person getStudentByName(List<Person> persons, String name) {

        Person result = null;
        for (Person temp : persons) {
            if (name.equals(temp.getName())) {
                result = temp;
            }
        }
        return result;
    }

使用stream.filter ()过滤一列表,并.findAny().orElse (null)返回一个对象的条件。

List<Person> persons = Arrays.asList(new Person("mkyong"),
		new Person("michael"), new Person("lawrence"));

Person result = persons.stream()				   // Convert to steam
	.filter(x -> "michael".equals(x.getName()))	// we want "michael" only
	.findAny()									// If 'findAny' then return found
	.orElse(null);								// If not found, return null  

更多赛选条件

List<Person> persons = Arrays.asList(new Person("mkyong", 20),
	    new Person("michael", 21), new Person("lawrence", 23));

	Person result = persons.stream()
	    .filter((x) -> "michael".equals(x.getName()) && 21==x.getAge())
	    .findAny()
	    .orElse(null);

	//or like this
	Person result = persons.stream()
	    .filter(x -> {
	        if("michael".equals(x.getName()) && 21==x.getAge()){
	            return true;
	        }
	        return false;
	    }).findAny()
	    .orElse(null);

 使用filter和map例子

List<Person> persons = Arrays.asList(new Person("mkyong", 20),
	new Person("michael", 21), new Person("lawrence", 23));

String name = persons.stream()
	.filter(x -> "michael".equals(x.getName()))
	.map(Person::getName)						//convert stream to String
	.findAny()
	.orElse("");

//name = michael

 

 

 

    原文作者:重新的开始
    原文地址: http://www.cnblogs.com/julian-keen/p/5852004.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞