簡體   English   中英

如何使用Java流獲取字符串和存儲在類對象的Arraylist中的ArrayList

[英]How to get an String and the ArrayList stored in a Arraylist of objects of a class using Java stream

我已經修改了代碼,並嘗試在特定條件下(例如'str'字符串等於2)獲取ArrayList和存儲在對象的Arraylist中的字符串。 我無法將Stream轉換為ArrayList。 請幫助我了解從該流中獲取ArrayList需要做什么。

我有一個類“ SampleClass”,如下所示:

import java.util.ArrayList;

public class SampleClass {
String str;
ArrayList<String> al;
String check;

public SampleClass(String str, ArrayList<String> al, String check) {
    super();
    this.str = str;
    this.al = al;
    this.check = check;
}
public String getStr() {
    return str;
}
public void setStr(String str) {
    this.str = str;
}
public ArrayList<String> getAl() {
    return al;
}
public void setAl(ArrayList<String> al) {
    this.al = al;
}
public String getCheck() {
    return check;
}
public void setCheck(String check) {
    this.check = check;
}

}

我有另一個類“ GetTheArrayListStoredInAnotherArrayList”,如下所示,在這里我試圖獲取存儲在對象ArrayList中的ArrayList。 請糾正我錯的地方。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Collectors;

public class GetTheArrayListStoredInAnotherArrayList{

public static void main(String[] args) {
    String test = "qw,rer,try,try,erh5,wertgw45t,45";
    ArrayList<String> al = new ArrayList<String>();
    al.addAll(new ArrayList<String>(Arrays.asList(test.split(","))));
    System.out.println(al);
    ArrayList<SampleClass> sca = new ArrayList<SampleClass>();
    SampleClass sc1 = new SampleClass("1", al,"ch1");
    SampleClass sc2 = new SampleClass("2", al,"cc2");
    SampleClass sc3 = new SampleClass("3", al,"fr3");
    SampleClass sc4 = new SampleClass("4", al,"fg4");
    sca.add(sc1);
    sca.add(sc2);
    sca.add(sc3);
    sca.add(sc4);
    ArrayList<String> als1 = null;
    ArrayList<String> als = sca.stream().filter( s -> s.getStr().equals("2")).flatMap(sc -> sc.getAl().stream()).collect(Collectors.toCollection(ArrayList::new));
    System.out.println(als);
    String ch = (String) sca.stream().filter(s -> s.getStr().equals("1")).map(ac -> ac.getCheck());
    System.out.println(ch);
}
}

執行代碼時出現以下錯誤:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Cannot cast from Stream<String> to String

at GetTheArrayListStoredInAnotherArrayList.main(GetTheArrayListStoredInAnotherArrayList.java:24)

不能完全確定您要做什么,但是您需要稍微更改代碼:

         List<String> als = sca.stream()
             .filter(s -> s.getStr().equals("2"))
             .flatMap(sc -> sc.getAl().stream())
             .collect(Collectors.toList());

一些東西 :

flatMap必須返回Stream (在您的情況下,您將返回List

Collectors.toList不保證返回的List ,因此分配是給List而不是ArrayList

編輯

這個:

  Stream<String> stream = sca.stream().filter(s -> s.getStr().equals("1"))
                                   .map(ac -> ac.getCheck());

將產生一個Stream<String> 您不能簡單地將其轉換為String ,而必須將其收集/減少為所需的任何內容。 就像說一個List

  List<String> list = sca.stream()
        .filter(s -> s.getStr().equals("1"))
        .map(ac -> ac.getCheck())
        .collect(Collectors.toList());

或單個String ,例如:

  String r = sca.stream()
        .filter(s -> s.getStr().equals("1"))
        .map(ac -> ac.getCheck())
        .collect(Collectors.joining(","));

這實際上是基本內容...您應該真正學習一些示例和文檔。

更改

ArrayList<String> als = sca.stream().filter( s -> s.getStr().equals("2")).flatMap( sc -> sc.getAl());   

ArrayList<String> als = sca.get(0).getAl();

首先,您必須使用List而不是ArrayList。 因此,使用列表,您的代碼將看起來像

List<String> als1 = null;
    List<String> als = sca.stream().
            filter(s -> s.getStr().equals("2")).  //Comparing 
            map(s -> s.getAl())  // Converting List<SampleClass> to list of all al list inside all SampleClass in format List<List<Straing>> 
            .flatMap(ArrayList::stream)  //Creating a flat list from list of list of List ::  List<List<Straing>> --To--> List<String>
            .collect(Collectors.toList());  // Collecting as list

我已詳細注釋了此代碼。 但是這里,如果列表中有兩個SampleCalss對象,其str = 2,則它將合並兩個對象的al列表。 希望對您有幫助。

我正在嘗試將ArrayList存儲在對象的ArrayList中。

好吧,基本算法如下:對sca過濾,以便僅保留str為“ 2”的元素->從所有剩余元素中獲取單個元素->獲取存儲在該元素內部的al

您已經正確完成了第一部分:

sca.stream().filter( s -> s.getStr().equals("2"))

但是現在您需要從過濾后的結果中獲取單個元素(過濾器可能導致剩余多個元素),因此您可以調用findFirst

.findFirst().get()

如果過濾器后沒有剩余元素,則此get調用將引發異常。 如果您不希望它引發異常,則可以將其替換為orElse調用:

.findFirst.orElse(new SampleClass("", null))

如果使用orElse ,則如果沒有str為“ 2”的元素,則方法鏈的評估結果將為null

現在,您只需要通過調用getAl()獲取數組列表:

.getAl();

現在,我們將所有這些結合在一起:

ArrayList<String> als = sca.stream()
    .filter( s -> s.getStr().equals("2"))
    .findFirst().orElse(new SampleClass("", null)).getAl();

如何轉換 ArrayList<string> 至 ArrayList<object> using.collect(Collectors.toList() 在 Java stream<div id="text_translate"><p> 如何在 Java stream 中使用.collect(Collectors.toList()將ArrayList&lt;String&gt;轉換為ArrayList&lt;Object&gt;</p><p> 之前我用過</p><pre>CommonList = detailUtils.SelectIDValueGetterObservable(getActivity()).stream().forEach(i -&gt; CommonList.add(new foo(i));`</pre><p> 但是我遇到了這些<strong>副作用</strong></p><p> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html" rel="nofollow noreferrer">https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html</a></p><p> 這建議.collect(Collectors.toList()</p><p> 我們該怎么做</p></div></object></string>

[英]How can I convert ArrayList<String> to ArrayList<Object> using .collect(Collectors.toList() in Java stream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 如何使用SET類從Type Setters&Getters類的“ Arraylist字符串對象”的Arraylist中獲取唯一行 如何使用 java 7 從存儲在 ArrayList 中的 Pojo 對象中獲取鍵值對 如何檢索存儲在Java ArrayList中的對象值 ArrayList 對象如何存儲在 Java 的 HashSet 中? 如何轉換 ArrayList<string> 至 ArrayList<object> using.collect(Collectors.toList() 在 Java stream<div id="text_translate"><p> 如何在 Java stream 中使用.collect(Collectors.toList()將ArrayList&lt;String&gt;轉換為ArrayList&lt;Object&gt;</p><p> 之前我用過</p><pre>CommonList = detailUtils.SelectIDValueGetterObservable(getActivity()).stream().forEach(i -&gt; CommonList.add(new foo(i));`</pre><p> 但是我遇到了這些<strong>副作用</strong></p><p> <a href="https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html" rel="nofollow noreferrer">https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html</a></p><p> 這建議.collect(Collectors.toList()</p><p> 我們該怎么做</p></div></object></string> 如何使用Java獲取存儲在ArrayList中的對象的屬性 使用 Java 流過濾對象的 ArrayList 以返回字符串類型的 ArrayList 如何在java中將ArrayList轉換為String [],Arraylist包含VO對象 如何在Java類中聲明對象的ArrayList? 如何在Java中定義嵌套類對象的arraylist?
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM