Java8 nueva y nueva API de operación común Stream Stream

¿Qué es el flujo?
JDK8 nos proporciona un nuevo concepto: Stream stream sigue el principio de "no hacer qué" En el ejemplo de stream, describimos lo que hay que hacer: obtener palabras largas y contarlas
.
En la superficie, los flujos se parecen mucho a las colecciones y ambos nos permiten transformar y obtener datos. Sin embargo, existen diferencias significativas entre ellos:

1. La secuencia no almacena sus elementos.
2. La operación de la transmisión no modificará la fuente de datos. Por ejemplo, el método de filtro no cambiará el elemento original, pero generará una nueva
transmisión . 3. La operación de la transmisión se realiza de la manera más perezosa posible, lo que significa que hasta que se necesite el resultado, Se ejecutará la operación

El proceso típico de operar un flujo:
1. Crear un flujo
2. Especificar una operación intermedia que transforme el flujo inicial en otros flujos, que puede incluir varios pasos
3. Terminar la operación para producir resultados. A partir de ese momento, esta transmisión ya no se podrá utilizar

El siguiente es un resumen de las API de Stream más utilizadas

1. Filtro (filtrar, recibir interfaz de función de predicado, generar todos los elementos que satisfacen el predicado, interfaz de consumidor de consumidor incorporada)
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 los primeros N elementos y devolver una nueva secuencia)
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. El
formato básico del mapa (mapeo, elementos de mapeo, devolución de la nueva secuencia después del mapeo, interfaz Función <T, R> incorporada) :<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. Omitir (omitir, omitir los primeros N elementos y devolver una nueva secuencia)
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. El
formato básico de recuento (devuelve el número de elementos de esta secuencia) :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. El
formato básico de forEach (realizar una operación en cada elemento de esta secuencia) :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));
	}
}

Ver documentos de ayuda para otras API: documentos de ayuda en línea en chino JDK8

Supongo que te gusta

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