javaliststream
A. java for循环 怎样把一个list里相同的数据放到一起
通过题主的描述可以看到,其实就是一个List<Integer>的集合数据处理问题,希望把相同的数据放到一起,是一种归类操作,也就是说其实总得需要把List<Integer>形式转化为Map<Integer, List<Integer>>的形式
这种形式map的key也就是当前的这个数字,而这个value就是这个数字对应的所有当前出现此key的集合
List<Integer>list=Arrays.asList(1,1,2,3,4,2,1);
Map<Integer,List<Integer>>map=newHashMap<>();
for(Integernum:list){
//map是否包含此key,若已经包含则添加一个新的数字到对应value集合中
if(map.containsKey(num)){
map.get(num).add(num);
}else{
//map不包含此key,则重新创建一个新集合,并把这个数字添加进集合
//,再把集合放到map中
List<Integer>newList=newArrayList<>();
newList.add(num);
map.put(num,newList);
}
}
System.out.println(map);
输出结果
结果也是一样的,题主可以自行选择
B. java stream 及早求值
流使用的通用格式:
获得流对象Stream
对流对象Stream进行惰性求值,返回值仍然是一个Stream对象。
对流对象Stream进行及早求值,返回值不在是一个Stream对象。
C. java list.stream.filter 效率高吗
不高 以前测试着玩过 lambda效率好像还不如foreache
D. Java8 新特性中的Stream,如何按照条件替换原来stream中的数据
1、首先利用foreach()方法对Stream元素进行遍历,如下图所示。
E. 创建一个方法,参数1:List类型,传入可能为null;参数2:int类型;基于stream操
这是Java8的开始的新API ,stream 流操作
首先创建一个User类,然后创建一个Test 测试类
//核心代码如下
publicstaticList<User>filterByLevel(List<User>list,intlevel){
returnlist==null?newArrayList<>():list.stream().filter(u->u.getLevel()==2).collect(Collectors.toList());
}
完整参考代码和注释如下
importjava.util.ArrayList;
importjava.util.List;
importjava.util.stream.Collectors;
//用户类
classUser{
privateStringname;//名
privateintlevel;//等级
publicUser(){//无参数构造器
}
publicUser(Stringname,intlevel){//有参数构造器
this.name=name;
this.level=level;
}
//方便测试,重写toString方法
publicStringtoString(){
return"User[name="+name+",level="+level+"]";
}
//----下面是属性的setter和getter----
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetLevel(){
returnlevel;
}
publicvoidsetLevel(intlevel){
this.level=level;
}
}
//测试类
publicclassTest{
publicstaticvoidmain(String[]args){
List<User>list=newArrayList<User>();
list.add(newUser("张三",1));
list.add(newUser("李四",2));
list.add(newUser("王五",2));
list.add(newUser("燕小六",3));
list.add(newUser("田七",2));
List<User>resultList=filterByLevel(list,2);
System.out.println(resultList);
}
//题目要求的方法
publicstaticList<User>filterByLevel(List<User>list,intlevel){
if(list==null){//如果list为null.返回一个空的集合
returnnewArrayList<User>();
}
//集合进行流处理.筛选level为2的元素,并且把满足条件的结果收集起来
return
list.stream()
.filter(u->u.getLevel()==2)
.collect(Collectors.toList());
}
}
F. Java8,stream().map().collect(Collectors.toList()).forEach()和stream().map().forEach()有啥区别
在stream().map().collect(Collectors.toList()).forEach()中,你的forEach()针对的List;而
stream().map().forEach()针对的是Stream流。从结果操作来看是一样的,中间过程回产生一些临时变量。
G. JAVA1.8Stream如何使用
这个叫stream流运算,是目前市场上比较流行的用法,效率会比较高,举几个例子吧:
常用的流
1、collect(Collectors.toList())
将流转换为list。还有toSet(),toMap()等。
这几个是我觉得在公司比较实用的,可以多练习,然后在看比较深的steamAPI。纯手打望采纳。
H. 求助大神:java 中 现有一个list 要取出list中所有元素拼接成字符串以逗号隔开应该如何做
publicclassTest{
publicstaticvoidmain(String[]args){
List<String>list=newArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
Stringstr="";
for(inti=0;i<list.size();i++){
str+=list.get(i)+",";
}
System.out.println(str);
}
}
I. Java8中List直接写forEach与调用.stream().forEach()有何差别
java8中,引入了流的概念,主要的目的还是为了,提高代码的可读性和编写代码时的实效性,实际上,在简单的代码逻辑中,流的优势并体现不出来,但是在复杂的业务操作逻辑中,流的优势就很大了。
那你应该注意的,不是foreach的区别,而是用传统的集合工具实现循环,和用流的概念来实现循环的区别。
所以还是认真的了解流(stream)的概念
J. java中 如何从LIST 查找指定元素的位置
//先用contains判断是否有该元素
if(list集合.contains(对象)){
list集合.indexOf(对象名);
}
因为List 是一个元素有序的、可以重复、可以为 null的集合;
所以;
indexOf可以获取元素出现的第一个位置的引索,与之相反的是lastlndexOf获取元素最后出现的位置引索,如果集合中没有该元素则返回-1,其原理都是利用equals方法配合历遍来判断。
(10)javaliststream扩展阅读:
C++中list用法详解
.1list中的构造函数:
list() 声明一个空列表;
list(n) 声明一个有n个元素的列表,每个元素都是由其默认构造函数T()构造出来的
list(n,val) 声明一个由n个元素的列表,每个元素都是由其复制构造函数T(val)得来的
list(n,val) 声明一个和上面一样的列表
list(first,last) 声明一个列表,其元素的初始值来源于由区间所指定的序列中的元素