List--Stream的常用操作

一、测试:

public class StreamTest {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        for (int i = 1; i < 11; i++) {
            list.add(i);
        }
        list.add(9);list.add(10);
        System.err.println("原list:" + list);
        //1、转化为int并相加、相乘
        System.err.println("list中各元素相加为:" + list.stream().mapToInt(item -> item).sum());
        System.err.println("list中各元素相加为:" + list.stream().reduce(0, (a, b) -> a + b));
        System.err.println("list中各元素相加为:" + list.stream().reduce(0, Integer::sum));
        System.err.println("list中各元素相乘为:" + list.stream().reduce(1, (a, b) -> a * b));
        //2、统计长度
        System.err.println("list中有原素:" + list.stream().count());
        //3、过滤值不为10的原素
        System.err.println("过滤值不为10的原素:" + list.stream().filter(item -> item != 10).collect(Collectors.toList()));
        //4、去重
        System.err.println("去重后的list为:" + list.stream().distinct().collect(Collectors.toList()));
        //5、排序
        System.err.println("排好序的list为:" + list.stream().sorted(Comparator.comparingInt(item -> item)).collect(Collectors.toList()));
        //6、拿取前三个原素
        System.err.println("拿取前三个原素:" + list.stream().limit(3).collect(Collectors.toList()));
        // 7、排除前三个原素
        System.err.println("排除前三个原素:" + list.stream().skip(3).collect(Collectors.toList()));
        // 先拿到前五个原素,再排除前三个原素
        System.err.println("先拿到前五个原素,再排除前三个原素:" + list.stream().limit(5).skip(3).collect(Collectors.toList()));
        //8、取得最大值和最小值
        System.err.println("最大值:" + list.stream().max(Integer::compareTo).get() + ",最小值:" + list.stream().min(Integer::compareTo).get());
        System.err.println("最大值:" + list.stream().reduce(1, Integer::max) + ",最小值:" + list.stream().reduce(1, Integer::min));
        //9、拿到第一个原素
        System.err.println("拿到第一个原素:" + list.stream().findFirst().get());
        //10、所有原素是否都等于10
        System.err.println("所有原素是否都等于10:" + list.stream().allMatch(item -> item.equals(10)));
        //11、是否有等于10的原素
        System.err.println("是否等于10的原素:" + list.stream().anyMatch(item -> item.equals(10)));
        //12、forEach打印
        list.forEach(System.err::println);
        System.err.println("***********************************************************8");
        list.forEach(item -> {
            System.err.println(item);
        });
    }
}

结果:

原list:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 10]
list中各元素相加为:74
list中各元素相加为:74
list中各元素相加为:74
list中各元素相乘为:326592000
list中有原素:12
过滤值不为10的原素:[1, 2, 3, 4, 5, 6, 7, 8, 9, 9]
去重后的list为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
排好序的list为:[1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 10]
拿取前三个原素:[1, 2, 3]
排除前三个原素:[4, 5, 6, 7, 8, 9, 10, 9, 10]
先拿到前五个原素,再排除前三个原素:[4, 5]
最大值:10,最小值:1
最大值:10,最小值:1
拿到第一个原素:1
所有原素是否都等于10:false
是否等于10的原素:true
1
2
3
4
5
6
7
8
9
10
9
10
***********************************************************8
1
2
3
4
5
6
7
8
9
10
9
10

二、项目中使用

Bean:
public class Bean {

    private int num;
    private String name;

    public Bean(int num, String name) {
        this.num = num;
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Bean{" +
                "num=" + num +
                ", name='" + name + '\'' +
                '}';
    }
}
测试类:
package stream.service;
import stream.model.Bean;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class StreamService {
    public static void main(String[] args) {
        List<Bean> list = new ArrayList<>();
        list.add(new Bean(18, "小周"));
        list.add(new Bean(19, "小张"));
        list.add(new Bean(20, "小李"));
        list.add(new Bean(19, "小王"));
        System.err.println("***************初始值****************");
        System.err.println(list.stream().collect(Collectors.toList()));

        //1、编号转化为int并相加、相乘
        System.err.println("list中各元素相加为:" + list.stream().mapToInt(item -> item.getNum()).sum());
        //2、统计长度
        System.err.println("list中有原素:" + list.stream().count());
        //3、过滤编号不为19的原素
        System.err.println("过滤值不为10的原素:" + list.stream().filter(item -> item.getNum() != 19).collect(Collectors.toList()));
        //4、去重
        System.err.println("去重后的list为:" + list.stream().distinct().collect(Collectors.toList()));
        //5、排序
        System.err.println("排好序的list为:" + list.stream().sorted(Comparator.comparingInt(item -> item.getNum())).collect(Collectors.toList()));
        //6、拿取前三个原素
        System.err.println("拿取前三个原素:" + list.stream().limit(3).collect(Collectors.toList()));
        // 7、排除前三个原素
        System.err.println("排除前三个原素:" + list.stream().skip(3).collect(Collectors.toList()));
        // 先拿到前五个原素,再排除前三个原素
        System.err.println("先拿到前三个原素,再排除前一个原素:" + list.stream().limit(3).skip(1).collect(Collectors.toList()));
        //8、取得编号最大值和最小值
        System.err.println("最大值:" + list.stream().max(Comparator.comparingInt(item -> item.getNum())).get() + ",最小值:" + list.stream().min(Comparator.comparingInt(item -> item.getNum())).get());
        //9、拿到第一个原素
        System.err.println("拿到第一个原素:" + list.stream().findFirst().get());
        //10、所有原素编号是否都等于19
        System.err.println("所有原素是否都等于10:" + list.stream().allMatch(item -> item.getNum() == 19));
        //11、是否有等于19的编号
        System.err.println("是否等于10的原素:" + list.stream().anyMatch(item -> item.getNum() == 19));
        //12、forEach打印
        list.forEach(System.err::println);
    }
}
***************初始值****************
[Bean{num=18, name='小周'}, Bean{num=19, name='小张'}, Bean{num=20, name='小李'}, Bean{num=19, name='小王'}]
list中各元素相加为:76
list中有原素:4
过滤值不为10的原素:[Bean{num=18, name='小周'}, Bean{num=20, name='小李'}]
去重后的list为:[Bean{num=18, name='小周'}, Bean{num=19, name='小张'}, Bean{num=20, name='小李'}, Bean{num=19, name='小王'}]
排好序的list为:[Bean{num=18, name='小周'}, Bean{num=19, name='小张'}, Bean{num=19, name='小王'}, Bean{num=20, name='小李'}]
拿取前三个原素:[Bean{num=18, name='小周'}, Bean{num=19, name='小张'}, Bean{num=20, name='小李'}]
排除前三个原素:[Bean{num=19, name='小王'}]
先拿到前三个原素,再排除前一个原素:[Bean{num=19, name='小张'}, Bean{num=20, name='小李'}]
最大值:Bean{num=20, name='小李'},最小值:Bean{num=18, name='小周'}
拿到第一个原素:Bean{num=18, name='小周'}
所有原素是否都等于10:false
是否等于10的原素:true
Bean{num=18, name='小周'}
Bean{num=19, name='小张'}
Bean{num=20, name='小李'}
Bean{num=19, name='小王'}

已有 0 条评论

    欢迎您,新朋友,感谢参与互动!