创建一个方法,参数1:List类型,传入可能为null;参数2:int类型;基于stream ***

创建一个方法,参数1:List类型,传入可能为null;参数2:int类型;基于stream *** ,第1张

这是Java8的开始的新API ,stream 流 *** 作

首先创建一个User类,然后创建一个Test 测试类

//核心代码如下

public static List<User> filterByLevel(List<User> list, int level) {

    return list==nullnew ArrayList<>():liststream()filter(u->ugetLevel()==2)collect(CollectorstoList());

}

完整参考代码和注释如下

import javautilArrayList;

import javautilList;

import javautilstreamCollectors;

// 用户类

class User {

private String name;// 名

private int level;// 等级

public User() { //无参数构造器

}

public User(String name, int level) {//有参数构造器

thisname = name;

thislevel = level;

}

//方便测试,重写toString方法

public String toString() {

return "User [name=" + name + ", level=" + level + "]";

}

//----下面是属性的setter和getter----

public String getName() {

return name;

}

public void setName(String name) {

thisname = name;

}

public int getLevel() {

return level;

}

public void setLevel(int level) {

thislevel = level;

}

}

// 测试类

public class Test {

public static void main(String[] args) {

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

listadd(new User("张三", 1));

listadd(new User("李四", 2));

listadd(new User("王五", 2));

listadd(new User("燕小六", 3));

listadd(new User("田七", 2));

List<User> resultList = filterByLevel(list, 2);

Systemoutprintln(resultList);

}

//题目要求的方法

public static List<User> filterByLevel(List<User> list, int level) {

if (list == null) {// 如果list为null 返回一个空的集合

return new ArrayList<User>();

}

// 集合进行流处理 筛选level为2的元素,并且把满足条件的结果收集起来

return 

liststream()

filter(u -> ugetLevel() == 2)

collect(CollectorstoList());

}

}

a = 'a'

b = 'b'

c = 'c'

lst = [{a: 1, b: 2, c: 3}, {a: 1, b: 2, c: 3}, {a: 1, b: 2, c: 3}, {a: 1, b: 2, c: 3}]

from collections import defaultdict

res = defaultdict(int)

for k in set(lst[0]keys()):

res[k] = sum([d[k] for d in lst])

print(res)

{'a': 4, 'c': 12, 'b': 8}

寻找相同的数据, 可以使用多种方式,下面简单介绍2种

第一种: 循环遍历,然后在把每一个元素,在其他集合里查找, 如果都存在该元素,就把这个元素保存起来

第二种: java8流处理, 原理差不多, 但是语法比较简洁

稍微注意的是list1 = {'A','A','B'}和list2 = {'A','C'} 如果粗糙的求交集,会得到一个交集结果{'A','A'}, 但是如果要严格取交集那么结果是一个'A'

解决起来很简单, 创造一个boolean[] b2=new boolean[list2size]; 该boolean数组用于标记,list2的元素,哪些被使用了,哪些没有被使用被使用的立刻标记为true 下次不再使用

简单的参考代码: 可以按照自己的需求进行扩展和完善

import javautilArrayList;

import javautilArrays;

import javautilstreamCollectors;

public class Demo1 {

//为了方便, 全部定义成静态属性,方便静态方法内使用

static ArrayList<Integer> list1 = new ArrayList<Integer>(ArraysasList(1, 2, 3, 4, 5, 6));

static ArrayList<Integer> list2 = new ArrayList<Integer>(ArraysasList(11, 22, 33, 44, 55, 6));

static ArrayList<Integer> list3 = new ArrayList<Integer>(ArraysasList(12, 13, 14, 15, 16, 6));

public static void main(String[] args) {

test1();//java8 流处理

test2();//传统遍历循环进行处理

}

//流处理求交集

private static void test1() {

Systemoutprintln("list1,list2,list3的交集是:");

list1stream()filter(num -> list2contains(num) && list3contains(num))collect(CollectorstoList())stream()

forEach(Systemout::println);

}

//循环遍历求交集

private static void test2() {

ArrayList<Integer> result = new ArrayList<Integer>();

for (Integer num : list1) {

if (list2contains(num) && list3contains(num)) {

resultadd(num);

}

}

Systemoutprintln("list1,list2,list3的交集是:");

for (Integer i : result) {

Systemoutprintln(i);

}

}

}

list中是map,stream如何拿到key集合

liststream()map(m -> mkeySet())collect(CollectorstoSet());

// Q20:list中是map,stream如何拿到value集合

liststream()map(m -> mvalues())collect(CollectorstoSet());

LIST是个容器接口,可以理解为动态数组,传统数组必须定义好数组的个数才可以使用,而容器对象无须定义好数组下标总数,用add()方法即可添加新的成员对象,他可以添加的仅仅只能为对象,不能添加基本数据类型,容器还对应get(),remove()方法来获取和删除数据成员

import orgjunitTest;

import javaio;

import javautilArrayList;

import javautilList;

public class TestIo {

    //路径

    private static final String PATH = "D:\\demo1txt";

    @Test

    public void testIo() throws IOException {

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

        listadd("1");

        listadd("2");

        listadd("3");

        listadd("4");

        listadd("5");

        File file = new File(PATH);

        //如果没有文件就创建

        if (!fileisFile()) {

            filecreateNewFile();

        }

        //

        BufferedWriter writer = new BufferedWriter(new FileWriter(PATH));

            for (String l:list){

                writerwrite(l);

            }

            writerclose();

        Systemoutprintln("完成");

    }

}

结果

希望对你有帮助

会的。

fliter可以按照书写的表达式过滤stream流里的元素。stream代表从list获取流,filter采用过滤,it是item的缩写表示流里的每一个元素,这里it表示每一个User(当然,你可以理解问是一个参数,it你可以用其他任何参数名,比如user)。->该符号是lambdb表达式后面会做详细介绍。collect是收集流里的元素,最终放入一个List集合,返回List。

以上就是关于创建一个方法,参数1:List类型,传入可能为null;参数2:int类型;基于stream *** 全部的内容,包括:创建一个方法,参数1:List类型,传入可能为null;参数2:int类型;基于stream *** 、关于 list stream 的一个问题、Java中能取出List里的相同数据;比如{ { 1,2,3,4,5,6},{11,22,33,44,55,6},{12,13,14,15,16,6} };等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9715518.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存