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) 聲明一個列表,其元素的初始值來源於由區間所指定的序列中的元素