Stream流操作

今天了解了Stream流操作,觉得很有意思,如果在写代码的时候应用到,还是能有很大的帮助的。

举个例子,

1、有一个List<String>,我想要找出长度大于10的元素有几个。

List<String> result= Arrays.asList("123","123","12YKHVGVBsds","KHIUYVJVsdJOINKLsdsd","sdsAUBDNds","sdvffbsdd343gbt433","89898xcxb");

//传统的方法就是采用for循环找出长度大于10的数
int count=0;
for (String s : result) {
  if(s.length()>10){
     count++;
   }
}


stream流操作的过滤函数,就非常简洁明了啦。

long count1= result.stream().filter(s ->
    s.length()>10
).count();

2、现在还是这个List<String>,我想要将所有小写字母变成大写

这样就可以用到Stream中的.map方法啦

List<String> collect = result.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
System.out.println(collect);

代码很简洁,结果很nice:

[123, 123, 12YKHVGVBSDS, KHIUYVJVSDJOINKLSDSD, SDSAUBDNDS, SDVFFBSDD343GBT433, 89898XCXB]

3、现在想要将List<String>中的重复元素去掉,用Stream也非常简单

List<String> collect1 = result.stream().distinct().collect(Collectors.toList());
System.out.println(collect1);

结果很nice

[123, 12YKHVGVBsds, KHIUYVJVsdJOINKLsdsd, sdsAUBDNds, sdvffbsdd343gbt433, 89898xcxb]

 4、我想要统计List<String>里面所有的数字有几个

应用stream流的思路:现将List里面的所有的元素和成一个流,对这个大流进行过滤

long count2 = result.stream().flatMap(s -> {
    char[] chars = s.toCharArray();
    List<Character> t = new ArrayList<>();
    for (char c : chars) {
        t.add(c);
    }
    return t.stream();
 }).filter(c -> {
    return c >= '0' && c <= '9';
  }).count();

结果:

19

5、将list转为map

 结点类:

 static class Node{
        int code;
        String name;

        public Node(int code, String name) {
            this.code = code;
            this.name = name;
        }

        public int getCode() {
            return code;
        }

        public void setCode(int code) {
            this.code = code;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

 两种实现方式:

List<Node> list=new ArrayList<>();
list.add(new Node(1, "王杰"));
list.add(new Node(2, "hahahah"));
list.add(new Node(3, "hello word"));
list.add(new Node(4, "迪丽热巴"));

Map<Integer,String> map=new HashMap<>();
for(Node n:list){
   map.put(n.getCode(),n.getName());

}
System.out.println(map);

Map<Integer, String> collect =             list.stream().collect(Collectors.toMap(Node::getCode, Node::getName));
System.out.println(collect);

结果:

{1=王杰, 2=hahahah, 3=hello word, 4=迪丽热巴}
{1=王杰, 2=hahahah, 3=hello word, 4=迪丽热巴}

 

6、tomap收集时的小技巧之覆盖

 

        List<Node> list=new ArrayList<>();
        list.add(new Node(1, "王杰"));
        list.add(new Node(2, "hahahah"));
        list.add(new Node(3, "hello word"));
        list.add(new Node(4, "迪丽热巴"));
        list.add(new Node(4, "第2个 迪丽热巴"));

        Map<Integer,String> map=new HashMap<>();
        for(Node n:list){
            map.put(n.getCode(),n.getName());

        }
        System.out.println(map);

        //第一个覆盖第二个
        Map<Integer, String> collect = list.stream().collect(Collectors.toMap(Node::getCode, Node::getName,(k1,k2)->k1));
        System.out.println(collect);
        //第二个覆盖第一个
        Map<Integer, String> collect1 = list.stream().collect(Collectors.toMap(Node::getCode, Node::getName,(k1,k2)->k2));
        System.out.println(collect1);

结果:

{1=王杰, 2=hahahah, 3=hello word, 4=第2个 迪丽热巴}
{1=王杰, 2=hahahah, 3=hello word, 4=迪丽热巴}
{1=王杰, 2=hahahah, 3=hello word, 4=第2个 迪丽热巴}

7、tomap收集时小技巧之分组

//分组收集
Map<Integer, List<Node>> collect2 = list.stream().collect(Collectors.groupingBy(Node::getCode));

结果:

{1=[Node{code=1, name='王杰'}, Node{code=1, name='第二个王杰'}, Node{code=1, name='第三个王杰'}], 2=[Node{code=2, name='hahahah'}], 3=[Node{code=3, name='hello word'}], 4=[Node{code=4, name='迪丽热巴'}, Node{code=4, name='第2个 迪丽热巴'}]}

 8、数组求和

        List<Integer> list =Arrays.asList(1,2,3,4,5,6,7);
        int sum = list.stream().mapToInt(s -> s).sum();

        System.out.println(sum);

 结果:

28

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值