java 8 stream 流特性
文章目录
话不多说,直接撸代码
package com.stream;
import javax.swing.*;
import java.awt.event.ItemEvent;
import java.io.PipedOutputStream;
import java.util.*;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* java 8 stream 流的操作
*
* @author hjx
* @since 2022/3/1 15:18
*/
public class StreamTest {
/**
* 对List操作
*/
public void ListTest(){
List<String> lists= Arrays.asList("a","b","c","d","ef");
List<String> result=lists.stream().filter(as->as.contains("c")).collect(Collectors.toList());
System.out.println(result);
}
/**
* 去重操作
*/
public void streamDistinct(){
List<String> lists= Arrays.asList("a","b","c","c","ef");
List<String> result=lists.stream().distinct().collect(Collectors.toList());
System.out.println(result);
}
/**
* limit的使用
*/
public void streamLimit(){
List<String> lists= Arrays.asList("a","b","c","c","ef");
List<String> result=lists.stream().limit(3).collect(Collectors.toList());
System.out.println(result);
}
/**
* skip
* <li>跳过前面2个开始打印后面的</li>
*/
public void streamSkip(){
List<String> lists= Arrays.asList("a","b","c","c","ef");
List<String> result=lists.stream().skip(2).collect(Collectors.toList());
System.out.println(result); // c c ef
}
/**
* map的使用
* <li>用于处理中间操作</li>
*/
public void streamMap(){
List<String> lists= Arrays.asList("a","b","c","c","ef");
List<String> result=lists.stream().map(as->as.concat("_hjx")).collect(Collectors.toList());
System.out.println(result);
}
/**
* 扁平化处理
*/
public void flatMap(){
}
/**
* sorted
* <li>排序</li>
*/
public void sortedTest(){
List<String> lists= Arrays.asList("e","f","a","c","o");
List<String> result=lists.stream().sorted().collect(Collectors.toList());
System.out.println(result);
}
/************************************************ stream中终止操作符的使用************************************/
public void anyMatchTest(){
List<String> lists= Arrays.asList("e","f","a","c","o");
boolean result=lists.stream().anyMatch(as->as.contains("os"));
System.out.println(result); // false
}
/**
* 集合中每一个元素都不满足给定条件,true:都不满足给定条件
*/
public void noneMatch(){
List<String> lists= Arrays.asList("e","f","a","c","o");
boolean result=lists.stream().noneMatch(as->as.contains("k"));
System.out.println(result);
}
/**
* findAny:返回集合中的任意一个元素
*/
public void findAnyTest(){
List<String> lists= Arrays.asList("e","f","a","c","o");
Optional<String> any = lists.stream().findAny();
if(any.isPresent())
System.out.println(any.get());
}
/**
* findFirst
*
* <li>只取出第一个</li>
*/
public void findFirstTest(){
List<String> lists= Arrays.asList("e","f","a","c","o");
for (int i = 0; i < 10; i++) {
Optional<String> first = lists.stream().findFirst();
if(first.isPresent()){
System.out.println(first.get());
}
}
}
/**
* foreach遍历流
*/
public void forEachTest(){
List<String> lists= Arrays.asList("e","f","a","c","o");
lists.stream().forEach(System.out::println);
}
/**
* collect
* 将流转化为其他方式 如:list set map
* 具有去重作用 且无序
*
*/
public void collectTest(){
List<String> lists= Arrays.asList("e","f","a","o","c","o");
Set<String> result =lists.stream().collect(Collectors.toSet());
System.out.println(result);
System.out.println("\n-------------------------------------------\n");
/**
* Collectors.toMap():
* 第3个参数:遇到重复之后的处理
*/
Map<String, String> collect = lists.stream().collect(Collectors.toMap(v -> v.concat("-key"), v -> v, (a, b) -> b));
System.out.println(collect);
}
/**
* reduce:
*
* 将流中元素反复结合起来得到一个元素
*/
public void reduceTest(){
List<String> lists= Arrays.asList("e","f","a","o","c","o");
Optional<String> optional=lists.stream().reduce((acc,item)->{
return acc+item;
});
if(optional.isPresent())
System.out.println(optional.get()); //efaoco
}
public static void main(String[] args) {
StreamTest test=new StreamTest();
//test.ListTest();
//test.streamDistinct();
//test.streamLimit();
//test.streamSkip();
//test.streamMap();
//test.sortedTest();
//test.anyMatchTest();
//test.noneMatch();
//test.findAnyTest();
//test.findFirstTest();
//test.forEachTest();
//test.collectTest();
test.reduceTest();
}
}