java集合 stream 相关用法(1)

java8新增一种流式数据,让操作集合数据更简单方便。

定义基本对象:

public class Peo {

    private String name;

    private String id;

    public Peo() {
        super();
    }

    public Peo(String name, String id) {
        super();
        this.name = name;
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

}

1.toMap的使用

使用toMap方法将list集合转出对应的map

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Stemap {

    public static void main(String[] args) {

        List<Peo> list = new ArrayList<>();

        list.add(new Peo("a", "1"));
        list.add(new Peo("b", "2"));
        list.add(new Peo("c", "3"));
        list.add(new Peo("d", "4"));

        Map<String, Peo> map = list.stream().collect(Collectors.toMap(Peo::getId, s -> s));

        map.keySet().forEach(s->{
            System.out.println(s);
        });

    }
}

使用

Collectors.toMap方法将list转成Map,key = Id,value = Peo对象注意key值不能有重复,如果有重复就会报错,为了解决这种问题,我们可以使用以下的写法:

Map<String, Peo> map = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s1));

多加的一个方法(s1,s2)->s1,是指当遇到key值相同时,value使用已经添加的,忽略后面的对象,如果这么写(s1,s2)->s2,将会把后面的对象替换到map中,如下:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Stemap {

    public static void main(String[] args) {

        List<Peo> list = new ArrayList<>();

        list.add(new Peo("a", "1"));
    /*    list.add(new Peo("b", "2"));
        list.add(new Peo("c", "3"));
        list.add(new Peo("d", "4"));*/
        list.add(new Peo("e", "1"));

        Map<String, Peo> map1 = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s1));

        System.out.println(map1.get("1").getName());

        Map<String, Peo> map2 = list.stream().collect(Collectors.toMap(Peo::getId, s -> s,(s1,s2)->s2));

        System.out.println(map2.get("1").getName());

        /*map1.values().forEach(s->{
            System.out.println(s);
        });*/

    }
}

输出如下:

2.groupBy

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Stemap {

    public static void main(String[] args) {

        List<Peo> list = new ArrayList<>();

        list.add(new Peo("a", "1"));
        list.add(new Peo("b", "2"));
        list.add(new Peo("c", "3"));
        list.add(new Peo("d", "4"));
        list.add(new Peo("e", "1"));

        Map<String, List<Peo>> map1 = list.stream().collect(Collectors.groupingBy(Peo::getId));

        System.out.println("map 数量:"+map1.size());

        System.out.println("key = 1 数量:"+map1.get("1").size());
        map1.get("1").forEach(p ->{
            System.out.println(p.getName());
        });

        /*map1.values().forEach(s->{
            System.out.println(s);
        });*/

    }
}

输出如下:

我们可以通过groupBy方法对list数据分组,指定分组的key。

3.filter

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Stemap {

    public static void main(String[] args) {

        List<Peo> list = new ArrayList<>();

        list.add(new Peo("a", "1"));
        list.add(new Peo("b", "2"));
        list.add(new Peo("c", "3"));
        list.add(new Peo("d", "4"));
        list.add(new Peo("e", "1"));

        list = list.stream().filter(peo -> "1".equals(peo.getId())).collect(Collectors.toList());;

        list.forEach(p ->{
            System.out.println(p.getName());
        });

        /*map1.values().forEach(s->{
            System.out.println(s);
        });*/

    }
}

输出:

可用通过filter过滤出满足一定条件的数据。

后续还有关于distinct、limit、skip、allMatch等等方法,后面继续补充

原文地址:https://www.cnblogs.com/wangzun/p/10529550.html

时间: 2024-08-30 10:01:10

java集合 stream 相关用法(1)的相关文章

python 集合的相关用法

集合是无序的,不重复的数据类型,可以改的数据类型 (不可哈希)但里面的数据 不能更改(可哈西)所以说集合是不能够作为字典的键 由于集合的元素不重复,所以可以用集合来消除重复元素. s = [1,2,2,2,3,4] s1 = set(s) s = list(s1) print(s) # [1,2,3,4] 集合的增 s = {1,2,3} s.add('是啥') print(s) # {'是啥', 1, 2, 3} s.update(['没啥']) print(s) # {1, 2, 3, '是

Java集合相关面试问题和答案

Java集合相关面试问题和答案 面试试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类.

40个Java集合面试问题和答案

一.基础知识 Java集合框架 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array. 随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现. 集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类. (2)

疯狂Java学习笔记(61)-----------40个Java集合面试问题和答案

1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类. (2)随着使用经过严格测试的集合框架类,代

[转载]Java集合框架的常见面试题

http://www.jfox.info/40-ge-java-ji-he-lei-mian-shi-ti-he-da-an 整理自上面链接: Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点.这里,我列出了一些关于Java集合的重要问题和答案. 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用, Java1.2提出了囊括所有集

(转)40个Java集合面试问题和答案

Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点.这里,我列出了一些关于Java集合的重要问题和答案. 另外,码农网之前也整理过一篇关于Java集合面试题的文章:大公司最喜欢问的Java集合类面试题 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使 用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情

Java集合面试题

1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实现.集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类. (2)随着使用经过严格测试的集合框架类,代

面试题:Java集合面试题(40道)

Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点.这里,我列出了一些关于Java集合的重要问题和答案. 1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1.2提出了囊括所有集合接口.实现和算法的集合框架.在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久.它还包括在Java并发包中,阻塞接口以及它们的实

Java 8新特性stream API用法总结

前言 Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念.它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream.Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data