这是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} };等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)