簡體   English   中英

轉換清單 <HashMap<String, Object> &gt;串流

[英]Convert List<HashMap<String, Object>> to stream

我有一個類型為List<HashMap<String, Object>> ResultSet的列表,其中包含對數據庫的查詢結果。 我想在List對象上調用stream()。 我怎么做 ? 這段代碼創建了我的列表:

public class ResultSetToMap {
    int Columns = 0;
    List<Map<String, String>> data = new ArrayList<Map<String, String>>();
    HashMap<String, Object> row = new HashMap<>();

    public List ResultSetToMap(ResultSet rs) throws SQLException {
        ResultSetMetaData md = rs.getMetaData();
        int columns = md.getColumnCount();
        List<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();

        while (rs.next()) {
            row = new HashMap<String, Object>(columns);
            for (int i = 1; i <= columns; ++i) {
                row.put(md.getColumnName(i), rs.getObject(i));
            }
            list.add(row);
        }
        return list;

    }
}

我可以通過這種方式查詢列表數據:

for (HashMap<String, Object> map : list) {
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        System.out.println(entry.getKey() + " : " + entry.getValue());
    }
}

我想稍后再查詢那些數據。 類型:

films.stream()
    .filter(Film.LENGTH.greaterThan(60))
    .sorted(Film.TITLE)
    .forEach(System.out::println);

除了您應該更好地對SQL中的數據進行過濾和排序這一事實之外,還應該使用Object Film而不是Map

public class Film {
    private String title;
    private int length;
    // more attributes if you have ...

    public Film(String title, int length) {
        this.title = title;
        this.length = length;
    }

    public String getTitle() {
        return title;
    }

    public int getLength() {
        return length;
    }

    @Override
    public String toString() {
        return title + " : " + length;
    }
}

現在您可以在創建結果列表時使用它:

public List<Film> getFilmsFromResultSet(ResultSet rs) throws SQLException {
    List<Film> result = new ArrayList<>();

    while (rs.next()) {
        result.add(new Film(rs.getString("TITLE"), rs.getInt("LENGTH")));
    }

    return result;
}

rs.getInt()rs.getString()方法中使用表中的列名。

像這樣使用您的getFilmsFromResultSet()方法:

List<Film> films = getFilmsFromResultSet(rs);
films.stream()
        .filter(f -> f.getLength() > 60)
        .sorted(Comparator.comparing(Film::getTitle))
        .forEach(System.out::println);

您可以只使用flatMap操作,例如:

list.stream()
        .flatMap(map -> map.entrySet().stream())
        .forEach(entry -> System.out.println(entry.getKey() + " : " + entry.getValue()));

您可以通過在List對象上調用stream()stream() List

例:

list.stream()
    .filter(row -> ((Number) row.get("LENGTH")).intValue() > 60)
    .sorted(Comparator.comparing(row -> (String) row.get("TITLE")))
    .forEach(System.out::println);

請注意,構建代表行數據的對象列表而不是映射列表會更好,因此可以以類型安全的方式處理數據。

如何轉換列表<string[]>列出<object>使用 modelmapper 或 stream().map()?<div id="text_translate"><p> 我有以下數據作為 java 中的 String[] 列表,是否可以使用 stream().map() 進行轉換? 這是列表的一個示例。</p><pre> Data's type is List&lt;String[]&gt; data which contains the following structure: ["a","b","c","d"], ["e","f","g","e"], ["e","f","g","e"]</pre><p> 我試圖用modelMapper和沒有modelMapper的map我的值並且數據是空的:</p><pre> List&lt;Custom&gt; mapInfo = new ArrayList&lt;CustomData&gt;(); mapInfo=data.stream().map(objectModel -&gt; modelMapper.map(objectModel, CustomData.class)).collector(Collectors.toList());</pre><p> 但是,當我嘗試使用數據時,數組的每個 object 上的 object 結構都是空的:</p><pre> @Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor public class CustomData(){ @Builder.Default private String valueA=""; @Builder.Default private String valueB=""; @Builder.Default private String valueC=""; @Builder.Default private String valueD=""; }</pre></div></object></string[]>

[英]How to convert List<String[]> to List<Object> using modelmapper or stream().map()?

暫無
暫無

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

相關問題 如何轉換流 <HashMap<String, Object> &gt;到HashMap數組HashMap <String, Object> []? 如何使用 stream 過濾器獲取 hashmap 列表? ArrayList <hashmap<string, object> &gt; </hashmap<string,> 轉換清單 <Object> 列出 <HashMap<String,Double> &gt;用於json數組 將JSONArray轉換為List <HashMap<String,Object> &gt;在沒有GSON的java中 將Java字符串轉換為HashMap對象 收集 HashMap<string,object> 從 Stream<t></t></string,object> 如何轉換列表<string[]>列出<object>使用 modelmapper 或 stream().map()?<div id="text_translate"><p> 我有以下數據作為 java 中的 String[] 列表,是否可以使用 stream().map() 進行轉換? 這是列表的一個示例。</p><pre> Data's type is List&lt;String[]&gt; data which contains the following structure: ["a","b","c","d"], ["e","f","g","e"], ["e","f","g","e"]</pre><p> 我試圖用modelMapper和沒有modelMapper的map我的值並且數據是空的:</p><pre> List&lt;Custom&gt; mapInfo = new ArrayList&lt;CustomData&gt;(); mapInfo=data.stream().map(objectModel -&gt; modelMapper.map(objectModel, CustomData.class)).collector(Collectors.toList());</pre><p> 但是,當我嘗試使用數據時,數組的每個 object 上的 object 結構都是空的:</p><pre> @Getter @Setter @Builder @NoArgsConstructor @AllArgsConstructor public class CustomData(){ @Builder.Default private String valueA=""; @Builder.Default private String valueB=""; @Builder.Default private String valueC=""; @Builder.Default private String valueD=""; }</pre></div></object></string[]> 轉換列表<List<String> &gt; 流<Stream<String> &gt; 哈希表<String,List<String> &gt; 到 HashMap <Object,List<String> &gt; 使用流 如何將無類型對象轉換為 HashMap<String,Object>
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM