java求职篇——Stream流

stream例子:

List<String> names = new ArrayList<>();
Collections.addAll(names,"张三1","张三2","李四","王五","赵六");
System.out.println(names);

//使用stream寻找张开头的name并打印到控制台中
names.stream().filter(s -> s.startsWith("张")).forEach(System.out::println);

stream三个操作步骤

  • 创建stream
  • 中间操作
  • 终止操作

filter原理

遍历集合或数组中每个数据,筛选出符合要求的数据。

三种获取流的方式

  • Collection集合获取流
Collection<String> list = new ArrayList<>();
Stream<String> array = list.stream();
  • map集合获取流
Map<String,Integer> map = new HashMap<>();
//获取所有的键
Stream<String> keys = map.keySet().stream();
//获取所有的值
Stream<Integer> values = map.values().stream();
//获取键值对整体
Stream<Map.Entry<String, Integer>> entries = map.entrySet().stream();
  • 数组获取流
String[] name = {"张三1","张三2","李四","王五","赵六"};
Stream<String> name1 = Arrays.stream(name);
Stream<String> name2 = Stream.of(name);

使用map进行加工stream

  • 为集合元素添加一个前缀ZZ
  • Function第一个参数为传入的数据类型,第二个参数为返回的参数类型
List<String> name = new ArrayList<>();                                                                       name.add("张三1");
name.add("张三2");
name.add("李四");
name.add("王五");
name.stream().map(new Function<String, String>() {
    @Override
    public String apply(String s) {
        return "ZZ"+s;
    }
}).forEach(System.out::println);
  • 因为Function为函数式接口,所以这里可以进行简化
name.stream().map(s->"LL"+s).forEach(System.out::println);

distinct去除流中重复的数据

Arrays.asList(1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6).stream().distinct().forEach(System.out::println);
//123456

sorted排序

//默认是升序排序
Arrays.asList(1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6).stream().distinct().sorted().forEach(System.out::print);
//通过lambda修改排序规则
Arrays.asList(1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6).stream().distinct().sorted(((o1, o2) -> Double.compare(o2,o1))).forEach(System.out::print);

limit(限制流数据个数)、skip(跳过前几个数据)

Arrays.asList(1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6).stream().skip(3).limit(2).forEach(System.out::print);
//22(跳过前三个数据后取两个数据)

合并数据流

Stream<String> stream1 = name.stream().filter(s -> s.startsWith("张"));
Stream<Integer> stream2 = Stream.of(12, 18, 64);
Stream<Object> concat = Stream.concat(stream1, stream2);
concat.forEach(System.out::println);

Collectors.toList(返回数据流(List))

List<Integer> collect = Arrays.asList(1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6).stream().filter(x->x>2).collect(Collectors.toList());

count(收集数据的个数)

long count = Arrays.asList(1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6).stream().filter(x -> x > 2).count();

Collectors.joining(“,”)(返回字符串用,进行分割)

String collect = Stream.of("a","b","asd","llll","xs","w","nn").filter(x -> x.length() > 2).collect(Collectors.joining(","));

toArray(返回数组)

Object[] objects = Stream.of(1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6).filter(x -> x > 2).toArray();

  • 中间方法也称为非终结方法,调用完成后返回新的Stream流可以继续使用,支持链式编程
  • 在Stream流中无法直接修改集合、数组中的数据
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狗头实习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值