filter()
描述:对集合进行过滤,返回一个符合特定条件的Stream。
源码:
Stream<T> filter(Predicate<? super T> predicate);
测试代码:
private List<User>userList = new ArrayList<>();
@Before
public void init(){
userList.add(new User("zm",28, User.SexEnum.MALE));
userList.add(new User("zm1",38, User.SexEnum.FAMALE));
userList.add(new User("zm2",48, User.SexEnum.MALE));
}
@Test
public void testFilter(){
//筛选出性别不为FAMALE的
Streamstream = userList.stream().filter(user -> user.getSex()!= User.SexEnum.FAMALE);
logger.info(stream.collect(Collectors.toList()).toString());
}
测试结果:
[User{name='zm', age=28, sex=MALE}, User{name='zm2', age=48, sex=MALE}]
map()
描述:根据当前集合经过处理,得到一个包含目标类型Stream。
源码:
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
测试代码:
@Test
public void testMap(){
Stream<String> stream = userList.stream().map(user -> user.getName());
logger.info(stream.collect(toList()).toString());
}
用上面的用户列表,经过处理得到一个含用户名的Stream。
测试结果如下:
[zm, zm1, zm2]
mapToInt()
描述:根据一个集合,经过处理得到一个整数的IntStream。
源码:
IntStream mapToInt(ToIntFunction<? super T> mapper);
测试代码:
@Test
public void testMapToInt(){
//得到含用户年龄的IntStream
IntStream intStream = userList.stream().mapToInt(user -> user.getAge());
int[] ary = intStream.toArray();
logger.info(Arrays.toString(ary));
}
测试结果:
[28, 38, 48]
mapToLong()
描述:参考mapToInt()
mapToDouble()
描述:参考mapToInt()
flatMap()
描述:取出集合里面包含的集合属性的集合的Stream。如:List< User>是源集合,每个User包含一个List< Car>集合, 此方法能取出每个User里面的carList组合到一起,返回一个Stream。更直观的参见测试代码。
源码:
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
测试代码:
@Before
public void init(){
List<Car>carList = Arrays.asList(new Car("X1","BMW"),new Car("Q3","AUDI"));
userList.add(new User("zm",28, User.SexEnum.MALE,carList));
userList.add(new User("zm1",38, User.SexEnum.FAMALE,carList));
userList.add(new User("zm2",48, User.SexEnum.MALE,carList));
}
@Test
public void testFlatMap(){
Stream<Car> stream = userList.stream().flatMap(user -> user.getCarList().stream());
List<Car>carList = stream.collect(toList());
logger.info(carList.toString());
}
测试结果:
[Car{name='X1', type='BMW'}, Car{name='Q3', type='AUDI'}, Car{name='X1', type='BMW'}, Car{name='Q3', type='AUDI'}, Car{name='X1', type='BMW'}, Car{name='Q3', type='AUDI'}]
flatMapToInt()
描述:根据源Stream返回一个IntStream
源码:
IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper);
测试代码:
@Test
public void testFlatMapToInt(){
userList.forEach(user -> {
user.setIntegerList(Arrays.asList(1,2,3));
});
IntStream intStream = userList.stream().flatMapToInt(user -> IntStream.of(user.getAge()));
intStream.forEach(age ->{
logger.info(age+"");
});
}
测试结果:
一月 07, 2017 10:22:58 下午 com.zm.demo.StreamTest lambda$testFlatMapToInt$6
信息: 28
一月 07, 2017 10:22:58 下午 com.zm.demo.StreamTest lambda$testFlatMapToInt$6
信息: 38
一月 07, 2017 10:22:58 下午 com.zm.demo.StreamTest lambda$testFlatMapToInt$6
信息: 48
flatMapToLong()
描述:参考flatMapToInt()
flatMapToDouble()
描述:参考flatMapToInt()
distinct()
描述:去除重复的元素
源码:
Stream<T> distinct();
测试代码:
@Test
public void testDistinct(){
List<Integer> list = Stream.of(1,5,3,2,1,5,3,4).distinct().collect(Collectors.toList());
logger.info(list.toString());
}
测试结果:
[1, 5, 3, 2, 4]
sorted()
描述:按自然顺序排序
源码:
Stream<T> sorted();
测试代码:
@Test
public void testSorted(){
List<Integer> list = Stream.of(1,5,3,2,1,5,3,4).sorted().collect(Collectors.toList());
logger.info(list.toString());
}
测试结果:
[1, 1, 2, 3, 3, 4, 5, 5]
待续。。。