settolistjava
無需JAVA遞歸取!
從設計角度看,表結構設計已經有問題了!
即使是樹狀結構,為何表結構沒有體現?這也構成了為何樓主需要想辦法來應對非樹狀結構數據的樹狀顯示問題。
先進一步來說,表加一個grade欄位,來表明當前記錄處於第幾級。那麼直接一個SQL就可以取出來:
select lpad(' ',a.grade,'-')||a.name from myList a
這樣就可以按樓主需要的結構取出數據;
但還存在一個問題,就是順序問題,這樣取出的數據是無序的!
那麼我們再進一步看,我在做這種數據結構的表設計時,往往會給每個結點增加兩個欄位,left/right,分別代表其在樹中的左右值。
這樣就可以在上面SQL後增加order by a.left以保證取出數據的順序。
2. Java數組分成N個數組的所有組合
這個問題不是這么想的,
你可以想像一個n位二進制的數,找出所有隻有k個1,其他位都是0的數,這個二進制數的第x位為1就表示取字母表中的第x個字母,為0不取,最後得到的就是這個二進制數代表的組合,將所有的二進制數都翻譯成字母組合後,就是你要取得的所有字母組合了。
如果實在不會的話,待會再給你寫個代碼
public class Combination {
public static void main(String[] args) {
String[] valueSets = { "a", "b", "c", "d", "e" };
int n = 3;
List<String> list = combination(valueSets, n);
System.out.println(list);
for(String string: list){
System.out.println(string);
}
System.out.println("一共 "+list.size()+" 個。");
}
public static List<String> combination(String[] valueSets, int n) {
System.out.println(">>>>>combination");
List<String> binaryList = searchBinaryList(valueSets.length, n);
List<String> combinationList = toCombinationList(binaryList, valueSets);
return combinationList;
}
public static List<String> toCombinationList(List<String> binaryList,
String[] valueSets) {
List<String> combinationList = new ArrayList<String>();
for (String binary : binaryList) {
String combination = changeBinaryToCombination(binary, valueSets);
if (combination != null && combination.trim() != "") {
combinationList.add(combination);
}
}
return combinationList;
}
public static String changeBinaryToCombination(String binary,
String[] valueSets) {
String combination = "";
if (binary == null || binary.trim() == "") {
return null;
}
for (int i = 0; i < binary.length(); i++) {
if (binary.charAt(i) == '1') {
combination += valueSets[i];
}
}
return combination;
}
public static List<String> searchBinaryList(int length, int n) {
System.out.println(">>>>>searchBinaryList");
List<String> binaryList = new ArrayList<String>();
for (int i = 0; i < (int) Math.pow(2, length); i++) {
String binary = Integer.toBinaryString(i);
int count = oneCountsContainsInBinary(binary);
if (count == n) {
binaryList.add(toSpecifiedBitsBinary(binary, length));
}
}
return binaryList;
}
public static String toSpecifiedBitsBinary(String binary, int length) {
String specifiedBitsBinary = "";
for (int i = 0; i < length - binary.length(); i++) {
specifiedBitsBinary += 0;
}
specifiedBitsBinary += binary;
return specifiedBitsBinary;
}
public static int oneCountsContainsInBinary(String binary) {
int count = 0;
if (binary == null || binary.trim() == "") {
return count;
}
for (int i = 0; i < binary.length(); i++) {
if (binary.charAt(i) == '1') {
count++;
}
}
return count;
}
}
3. JAVA1.8Stream如何使用
這個叫stream流運算,是目前市場上比較流行的用法,效率會比較高,舉幾個例子吧:
常用的流
1、collect(Collectors.toList())
將流轉換為list。還有toSet(),toMap()等。

這幾個是我覺得在公司比較實用的,可以多練習,然後在看比較深的steamAPI。純手打望採納。
4. Java中如何去除List中的重復的值
屬性是????
先給你一個看看是不是你需要的好了,
//利用Set的特性,將所有項目放入Set
//中即可移除重復的項目
Set<String>stringSet=newHashSet<String>();
for(Stringelement:plicateArray){
stringSet.add(element);
}
//Set.size()為不重復項目的個數
StringnonDuplicateArray[]=newString[stringSet.size()];
//將Set中的項目取出放到nonDuplicateArray中
Object[]tempArray=stringSet.toArray();
for(inti=0;i<tempArray.length;i++){
nonDuplicateArray[i]=(String)tempArray[i];
}
5. java把一個list里的數據轉移到另外一個list
java將一個list里的數據轉移到另外一個list,可以使用for語句,一次使用add方法,示例如下:
ArrayListlist1=newArrayList();
list1.add("1");
list1.add("2");
list1.add("3");
ArrayListlist2=newArrayList();
list2.add("4");
for(inti=0;i<list1.size();i++)
{
list2.add(list1.get(i));//開始復制一個list的內容到另外一個list
}
//這樣就可以用list2添加list1的所有元素了!。想把他顯示出來可以如下
for(inti=0;i<list2.size();i++)
{
System.out.println(list2.get(i));
}
運行結果如下:

6. 用idea編寫java代碼時突然出現的問題求大佬指點
Java8在2014年三月發布了。我們打算將Pons的所有生產伺服器升級到這一新版本。從那時起,我們將大部分代碼庫遷移到lambda表達式、數據流和新的日期API上。我們也會使用Nashorn來把我們的應用中運行時發生改變的部分變成動態腳本。
除了lambda,最實用的特性是新的數據流API。集合操作在任何我見過的代碼庫中都隨處可見。而且對於那些集合操作,數據流是提升代碼可讀性的好方法。
但是一件關於數據流的事情十分令我困擾:數據流只提供了幾個終端操作,例如rece和findFirst屬於直接操作,其它的只能通過collect來訪問。工具類Collctors提供了一些便利的收集器,例如toList、toSet、joining和groupingBy。
例如,下面的代碼對一個字元串集合進行過濾,並創建新的列表:
stringCollection
.stream()
.filter(e -> e.startsWith( "a"))
.collect(Collectors.toList());
在遷移了300k行代碼到數據流之後,我可以說,toList、toSet、和groupingBy是你的項目中最常用的終止操作。所以我不能理解為什麼不把這些方法直接集成到Stream介面上面,這樣你就可以直接編寫:
stringCollection
.stream()
.filter(e -> e.startsWith( "a"))
.toList();
這在開始看起來是個小缺陷,但是如果你需要一遍又一遍地編寫這些代碼,它會非常煩人。
有toArray()方法但是沒有toList(),所以我真心希望一些便利的收集器可以在Java9中這樣添加到Stream介面中。是吧,Brian?ಠ_ಠ
註:Stream.js是瀏覽器上的Java 8 數據流API的JavaScript介面,並解決了上述問題。所有重要的終止操作都可以直接在流上訪問,十分方便。詳情請見API文檔。
無論如何,IntelliJ IDEA聲稱它是最智能的Java IDE。所以讓我們看看如何使用IDEA來解決這一問題。
使用 IntelliJ IDEA 來幫忙
IntelliJ IDEA自帶了一個便利的特性,叫做實時模板(Live Template)。如果你還不知道它是什麼:實時模板是一些常用代碼段的快捷方式。例如,你鍵入sout並按下TAB鍵,IDEA就會插入代碼段System.out.println()。更多信息請見這里。
如何用實時模板來解決上述問題?實際上我們只需要為所有普遍使用的默認數據流收集器創建我們自己的實時模板。例如,我們可以創建.toList縮寫的實時模板,來自動插入適當的收集器.collect(Collectors.toList())。
下面是它在實際工作中的樣子:
讓我們看看如何自己構建它。首先訪問設置(Settings)並在左側的菜單中選擇實時模板。你也可以使用對話框左上角的便利的輸入過濾。
下面我們可以通過右側的+圖標創建一個新的組,叫做Stream。接下來我們向組中添加所有數據流相關的實時模板。我經常使用默認的收集器toList、toSet、groupingBy 和 join,所以我為每個這些方法都創建了新的實時模板。
這一步非常重要。在添加新的實時模板之後,你需要在對話框底部指定合適的上下文。你需要選擇Java → Other,然後定義縮寫、描述和實際的模板代碼。
// Abbreviation: .toList
.collect(Collectors.toList())
// Abbreviation: .toSet
.collect(Collectors.toSet())
// Abbreviation: .join
.collect(Collectors.joining( "$END$"))
// Abbreviation: .groupBy
.collect(Collectors.groupingBy(e -> $END$))
特殊的變數$END$指定在使用模板之後的游標位置,所以你可以直接在這個位置上打字,例如,定義連接分隔符。
提示:你應該開啟"Add unambiguous imports on the fly"(自動添加明確的導入)選項,便於讓IDEA自動添加 java.util.stream.Collectors的導入語句。選項在 Editor → General → Auto Import中。
讓我們在實際工作中看看這兩個模板:
連接
Intellij IDEA中的實時模板非常靈活且強大。你可以用它來極大提升代碼的生產力。你知道實時模板可以拯救生活的其它例子嗎?請讓我知道!
作者:布客飛龍 segmentfault.com/a/1190000006033999
7. Java 將List中所有item中的某一個欄位值提出來生成一個新的List
as.forEach(n->a1s.add(n.a1));
8. Java如何將數組中具有相同的元素都刪去
如果是要把List中的重復元素刪除的話可以先吧List轉成Set去除重復元素
比如現在有個數組為 myArray ,裡面有部分的重復元素
Set mySet = new HashSet();
for(Object obj : Array){
mySet.add(obj);
}
mySet中所保存的元素就是唯一的了.
再吧mySet保存到數組中
完整例子:
// 創建一個數組,裡面存在重復的元素
String[] myArray = {"s","s","f","d"};
Set<String> mySet = new HashSet<String>();
// 去除重復元素
for(String s : myArray){
mySet.add(s);
}
myArray = new String[mySet.size()];
int index = 0;
// 將去重後的結果存入數組
for(String s : mySet){
myArray[index] = s;
index++;
}
// 列印出來結果
System.out.println(Arrays.toString(myArray));
9. 如何利用Java代碼實現List集合轉換成Set集合
Set和List都是介面,都實現了Collection介面和Iterable介面。
兩者的轉換不常進行,通過集合的 addAll() 方法可以實現
/**
*List和Set的轉化(Set轉化成List)
*/
publicstatic<T>List<T>SetToList(Set<T>set){
List<T>list=newArrayList<>();
list.addAll(set);//轉換核心
returnlist;
}
10. 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);
輸出結果

結果也是一樣的,題主可以自行選擇
