java - 将多个列表合并到一个流中的对象列表?
问题描述
我有这样的代码。它使用 JSoap 库。我正在从 torrent 站点获取标题、磁铁、种子、水蛭(这两个一起作为 TorrentStats)。现在我想将它们合并到一个列表中,当然在标准 for 循环中很容易做到这一点,但是有没有办法在流中映射或平面映射它们?
Document html = Jsoup.connect(SEARCH_URL + phrase.replaceAll("\\s+", "%20")).get();
Elements elements1 = html.select(".detLink");
Elements elements2 = html.select("td > a[href~=magnet:]");
Elements elements3 = html.select("table[id~=searchResult] tr td[align~=right]");
List < String > titles = elements1.stream()
.map(Element::text)
.collect(Collectors.toList());
List < String > magnets = elements2.stream()
.map(e - > e.attr("href"))
.collect(Collectors.toList());
List < TorrentStats > torrentStats = IntStream.iterate(0, i - > i + 2)
.limit(elements3.size() / 2)
.mapToObj(i - > new TorrentStats(Integer.parseInt(elements3.get(i).text()),
Integer.parseInt(elements3.get(i + 1).text())))
.collect(Collectors.toList());
//is there any way to use map or flatmap to connect these 3 list into this one?
List < Torrent > torrents = new ArrayList < > ();
for (int i = 0; i < titles.size(); i++) {
torrents.add(new Torrent(titles.get(i), magnets.get(i), torrentStats.get(i)));
}
解决方案
您可以使用它IntStream.range
来迭代索引。
List<Torrent> torrents = IntStream.range(0, titles.size())
.mapToObj(i -> new Torrent(titles.get(i), magnets.get(i), torrentStats.get(i)))
.collect(Collectors.toList());
推荐阅读
- javascript - 如何在迭代时删除数组中的元素
- c++ - 无法在需要对象展开修复的函数中使用 __try
- azure - Azure Active Directory 公司品牌 - 无法编辑
- angular - 如何从 json 角度检索键和值
- php - 如何每次都显示对新文本区域的反馈?
- node.js - 如何使用 Dialogflow 实现 mongoDB 数据库以创建聊天应用程序
- java-8 - 以周为单位的细分年份 - Java 8
- javascript - 数据表分页不起作用,,
- python - Python 在 bin(i) 和 int(x, base=2) 中使用什么算法?
- jquery - 如何为 ChartJs 图例添加标签