java8汇总

先贴实体类

package com.gant.model;

import java.util.List;

public class Article {
	private String title;
	private String content;
	private String autor;
	private List<String>tags;
	
	public Article(String title, String content, String autor, List<String>tags) {
		this.title=title;
		this.content=content;
		this.autor=autor;
		this.tags=tags;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getAutor() {
		return autor;
	}
	public void setAutor(String autor) {
		this.autor = autor;
	}
	public List<String> getTags() {
		return tags;
	}
	public void setTags(List<String> tags) {
		this.tags = tags;
	}
	
	
}
package com.gant.model;


public class Person {
	private String firstName, lastName, job, gender;  
	private int salary, age;  
	  
	public Person(String firstName, String lastName, String job,  
	                String gender, int age, int salary)       {  
	          this.firstName = firstName;  
	          this.lastName = lastName;  
	          this.gender = gender;  
	          this.age = age;  
	          this.job = job;  
	          this.salary = salary;  
	}


	public String getFirstName() {
		return firstName;
	}


	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}


	public String getLastName() {
		return lastName;
	}


	public void setLastName(String lastName) {
		this.lastName = lastName;
	}


	public String getJob() {
		return job;
	}


	public void setJob(String job) {
		this.job = job;
	}


	public String getGender() {
		return gender;
	}


	public void setGender(String gender) {
		this.gender = gender;
	}


	public int getSalary() {
		return salary;
	}


	public void setSalary(int salary) {
		this.salary = salary;
	}


	public int getAge() {
		return age;
	}


	public void setAge(int age) {
		this.age = age;
	}  
	
}

Article实体类:

package com.gant.model;

import java.util.List;

public class Article {
	private String title;
	private String content;
	private String autor;
	private List<String>tags;
	
	public Article(String title, String content, String autor, List<String>tags) {
		this.title=title;
		this.content=content;
		this.autor=autor;
		this.tags=tags;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getAutor() {
		return autor;
	}
	public void setAutor(String autor) {
		this.autor = autor;
	}
	public List<String> getTags() {
		return tags;
	}
	public void setTags(List<String> tags) {
		this.tags = tags;
	}
	
	
}

方法主体:

package com.gant.service;

import java.util.ArrayList;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

import com.gant.model.Article;
import com.gant.model.Person;

/**
 * 
 * 当一个方法或者变量需要初始化加载,或者是经常被调用的时候可以加上static
 * 
 * @ClassName StreamFilterDemo
 * @Description StreamFilter实例
 * @author chao
 * @date 2017年12月20日
 * @version 1.0
 */
public class StreamFilterDemo {

	public static void main(String[] args) {
		// getFirstJavaArticle();
		// getDistinctTags();
		// mapToIntTest();
		// filterDemo();
		// mapDemo();
		// mapToIntDemo();
		distinctDemo();
	}

	/**
	 * 用于过滤 用于在一堆数据中筛选出想要的数据,符合要求的数据
	 * 
	 * @Description filter方法的案例 void
	 */
	public static void filterDemo() {
		List<String> wordList = new ArrayList<String>() {
			{
				add("Elsdon");
				add("Tamsen");
				add("Floyd");
				add("Sindydg");
				add("Vere");
				add("Maudeghjj");
			}
		};
		Stream<String> words = wordList.stream();
		Stream<String> longWords = words.filter(w -> w.length() > 6); // 过滤筛选数据 T->Boolean
		// System.out.println(longWords.collect(Collectors.toSet()));
		// //和下面的语句不能同时使用,因为只能被读取一次。
		longWords.forEach((longwd) -> System.out.println(longwd));
	}

	/**
	 * 用于需要对一个流中的值进行某种形式的转换。如下代码:将所有单词转换为小写形式
	 * 
	 * @Description map方法案例 void
	 */
	public static void mapDemo() {
		List<String> wordList = new ArrayList<String>() {
			{
				add("Elsdon");
				add("Tamsen");
				add("Floyd");
				add("Sindydg");
				add("Vere");
				add("Maudeghjj");
			}
		};
		Stream<String> words = wordList.stream();
		// Stream<String> lowercaseWords = words.map(String::toLowerCase); //java的 “双冒号”
		// 写法 :方法引用 ,等同于下面语句
		Stream<String> lowercaseWords = words.map((String str) -> str.toLowerCase());// name -> name.toLowerCase()
		lowercaseWords.forEach((lw) -> System.out.println("转换后的结果是:" + lw)); // 遍历输出 foreach后面的兰布达方法表达式不能用括号括住
	}

	/**
	 * mapToDouble 和mapToLong同样试用
	 * 
	 * @Description 从复合类型中获取简单的基本类型数据,创建流对象。 void
	 */
	public static void mapToIntDemo() {
		List<Person> people = getPersonList();
		IntStream peopleStream = people.stream().mapToInt(p -> p.getAge()); // 将Stream得到的流中的数据转换为int
		int sum = peopleStream.sum();
		// peopleStream.forEach((ps)->System.out.println(ps+"---")); // 遍历输出
		// foreach后面的兰布达方法表达式不能用括号括住
		System.out.println("总年龄是: " + sum);
	}

	/**
	 * 用于业务中需要去重操作(注:此过滤是对于无序结果不稳定)
	 * 
	 * @Description 流的去重 void
	 */
	public static void distinctDemo() {
		List<Person> people = getPersonList();
		// Stream<Person> peopleStream = people.stream();
		// Stream<String> peopleStreamNew = peopleStream.map((person) ->
		// person.getJob().toLowerCase()).distinct().sorted(); //过滤操作.distinct().count()
		/*
		 * List<String> peopleStreamSorted = peopleStream.map((person) ->
		 * person.getJob().toLowerCase()).distinct() .sorted((n1, n2) ->
		 * n1.compareTo(n2)).limit(10).skip(1).collect(Collectors.toList());
		 */ // n2.compareTo(n1)表示倒序排
		Map<Integer, String> personMap = people.stream().collect(Collectors.toMap(Person::getAge, Person::getJob)); // 此处特别需要注意:键不能有重复的,否则会报错
		System.out.println(personMap);
		// long number = peopleStreamNew.count();
		// peopleStream.findFirst(); //找到第一个
		// peopleStream.forEach((ps)->System.out.println(ps));
		/*
		 * peopleStreamSorted.forEach((ps) -> System.out.println(ps));
		 * System.out.println(peopleStreamSorted);
		 */
		// long number = peopleStream.count();
	}

	public static Optional<Article> getFirstJavaArticle() {
		List<Article> articles = getArticleList();
		Optional<Article> print = articles.stream().filter(article -> article.getTags().contains("java")).findFirst();
		System.out.println(print);
		return articles.stream().filter(article -> article.getTags().contains("Java")).findFirst();
	}

	public static Set<String> getDistinctTags() {
		List<Article> articles = getArticleList();
		Set<String> print = articles.stream().flatMap(article -> article.getTags().stream())
				.collect(Collectors.toSet());
		System.out.println(print);
		return articles.stream().flatMap(article -> article.getTags().stream()).collect(Collectors.toSet());
	}

	public static List<Person> getPersonList() {
		@SuppressWarnings("serial")
		List<Person> people = new ArrayList<Person>() {
			{
				add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));
				add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));
				add(new Person("Tamsen", "Brittany", "PHP programmer", "female", 23, 1500));
				add(new Person("Floyd", "Donny", "PHP programmer", "male", 33, 1800));
				add(new Person("Sindy", "Jonie", "PHP programmer", "female", 32, 1600));
				add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));
				add(new Person("Maude", "Jaimie", "PHP programmer", "female", 27, 1900));
				add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));
				add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));
				add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));
				add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));
			}
		};
		return people;
	}

	public static List<Article> getArticleList() {
		List<Article> articles = new ArrayList<>();
		List<String> tagsList = new ArrayList<>();
		tagsList.add("java");
		tagsList.add("php");
		tagsList.add("ios");
		tagsList.add("c++");
		articles.add(new Article("adsf", "adf", "adfsa", tagsList));
		articles.add(new Article("as", "adsddf", "hg", tagsList));
		articles.add(new Article("rtry", "hf", "avbdfsa", tagsList));
		return articles;
	}

	public static void mapToIntTest() {
		List<Person> persons = new ArrayList<Person>() {
			{
				add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));
				add(new Person("Tamsen", "Brittany", "Java programmer", "female", 23, 1500));
				add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));
				add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));
				add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));
				add(new Person("Maude", "Jaimie", "Java programmer", "female", 27, 1900));
				add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));
				add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));
				add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));
				add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));
			}
		};
		// mapToInt 返回一个IntStream ,其中包含将给定函数应用于此流的元素的结果。返回的是新的流。
		IntSummaryStatistics intSummaryStatistics = persons.stream().mapToInt(person -> person.getAge())
				.summaryStatistics();
		System.out.println("最大年龄:" + intSummaryStatistics.getMax()); // 最大值
		System.out.println("最小年龄:" + intSummaryStatistics.getMin()); // 最小值
		System.out.println("年龄总和:" + intSummaryStatistics.getSum()); // 总计
		System.out.println("人数:" + intSummaryStatistics.getCount()); // 个数
		System.out.println("平均年龄:" + intSummaryStatistics.getAverage());// 平均数返回的是double类型
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值