Java8 nova e nova API de operação comum de stream stream

O que é fluxo?
O JDK8 nos fornece um novo conceito - fluxo de fluxo segue o princípio de "o que fazer em vez do que fazer". No exemplo de fluxo, descrevemos o que precisa ser feito: pegue palavras longas e conte-as
.
Superficialmente, os fluxos parecem muito semelhantes às coleções e ambos nos permitem transformar e obter dados. No entanto, existem diferenças significativas entre eles:

1. O fluxo não armazena seus elementos.
2. A operação do stream não modificará a fonte de dados. Por exemplo, o método de filtro não mudará o elemento original, mas gerará um novo Stream.
3. A operação do stream é realizada o mais preguiçosamente possível, o que significa que até que o resultado seja necessário, A operação será executada

O processo típico de operação de um fluxo:
1. Crie um fluxo
2. Especifique uma operação intermediária que transforma o fluxo inicial em outros fluxos, que podem incluir várias etapas
3. Encerre a operação para produzir resultados. A partir de então, este stream não pode mais ser usado

A seguir está um resumo das APIs comumente usadas do Stream

1. Filtre (filtre, receba interface de função de predicado, gere todos os elementos que satisfaçam predicado, interface de consumidor integrada)
formato básico :Stream<T> filter​(Predicate<? super T> predicate)

/**
 *测试Stream<T> filter​(Predicate<? super T> predicate)过滤 
 *在集合中找出姓张的人
 * @author 16003
 *
 */
public class Stream_filter {
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		List<String> list2 = new ArrayList<>();	
		Collections.addAll(list, "张三丰","张无忌","姜子牙","张飞","奥特曼");
		//方法一,用Lamda表达式的函数式接口
		list2 = fun(list, str->{
			return str.startsWith("张");
			});
		System.out.println(list2);
		
		//方法二,用Stream流的filter方法过滤	
		Stream<String> stream3 = list.stream().filter(str->{return str.startsWith("张");});
		stream3.forEach(str->System.out.println(str));
		
	}
	
	//方法一,用lamda表达式的函数式接口
	public static List<String> fun(List<String> list,Predicate<String>cate){
		List<String> list1 = new ArrayList<>();
		for(String str:list) {
			if(cate.test(str)==true) {
				list1.add(str);
			}
		}
		return list1;
	}
}

2. Limitar (truncar, truncar os primeiros N elementos e retornar um novo fluxo)
formato básico :Stream<T> limit​(long maxSize)

/**
 * 测试Stream中limit方法 取前几个元素
 * @author 16003
 *
 */
public class Stream_limit {
	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		Collections.addAll(list, "红鲤鱼","绿鲤鱼","黄鲤鱼","驴");
		Stream<String> stream = list.stream().limit(3);
		stream.forEach(str->System.out.println(str));
	}
}

3. O
formato básico do mapa (mapeamento, mapeamento de elementos, retorno do novo Fluxo após o mapeamento, interface de Função <T, R> embutida) :<R> Stream<R> map​(Function<? super T,​? extends R> mapper)

/**
 * 测试Stream中的map<Function<T t> mapper>方法
 * @author 16003
 *
 */
public class Stream_map {
	public static void main(String[] args) {
		//将字符串转换成Integer
		Stream<String> stream = Stream.of("1","2","3","4");
		Stream<Integer> stream1 = stream.map((String str)->{
			return Integer.parseInt(str);
		});
		
		stream1.forEach(str->System.out.println(str.getClass().getSimpleName()));
		
		
	}
}

4. Pule (pule, pule os primeiros N elementos e retorne um novo fluxo)
formato básico :Stream<T> skip​(long n)

/**
 * 测试Stream中skip方法 跳过前几个元素
 * @author 16003
 *
 */
public class Stream_skip {
	public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		Collections.addAll(list, 1,2,3,4,5,6,7,8,9);
		//跳过前三个元素
		Stream<Integer> stream = list.stream().skip(3);
		stream.forEach(str->System.out.println(str));
	}
}

5. O
formato básico de contagem (retorna o número de elementos neste fluxo) :long count()

/**
 * 测试Stream中count方法 返回流中元素个数
 * @author 16003
 *
 */
public class Stream_count {
	public static void main(String[] args) {
		ArrayList<Integer> list = new ArrayList<>();
		Collections.addAll(list, 1,2,3,4,5,6,7,8,9,0);
		Stream<Integer> stream = list.stream();
		long cnt = stream.count();
		System.out.println(cnt);
	}
}

6. O
formato básico de forEach (execute uma operação em cada elemento deste fluxo) :void forEach​(Consumer<? super T> action)

/**
 * Stream中Foreach方法 遍历
 * @author 16003
 *
 */
public class Stream_foreach {
	public static void main(String[] args) {
		Stream<String> stream = Stream.of("张三","李四","王五");
		stream.forEach(name -> System.out.println(name));
	}
}

Visualize documentos de ajuda para outras APIs: documentos de ajuda online JDK8 em chinês

Acho que você gosta

Origin blog.csdn.net/xulong5000/article/details/108052344
Recomendado
Clasificación