![](/img/trans.png)
[英]How to Convert Stream Stream<HashMap<String, Object>> to HashMap Array HashMap<String, Object>[]?
[英]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);
請注意,構建代表行數據的對象列表而不是映射列表會更好,因此可以以類型安全的方式處理數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.