【问题标题】:transform Map<Integer, Double> to Iterable<Tuple2<Integer, Double>>将 Map<Integer, Double> 转换为 Iterable<Tuple2<Integer, Double>>
【发布时间】:2014-12-19 06:41:49
【问题描述】:

我被 Java-8 中的数据转换困住了...

有人知道如何将Map&lt;Integer, Double&gt; 转换为Iterable&lt;Tuple2&lt;Integer, Double&gt;&gt;,甚至 Map.Entry&lt;Integer, Double&gt;Tuple2&lt;Integer, Double&gt;?

谢谢!

【问题讨论】:

  • 这是一个二元组。

标签: map tuples java-8 iterable


【解决方案1】:

Map&lt;&gt; 有一个Set&lt;Map.Entry&lt;K, V&gt;&gt; entrySet() 方法。这为您提供了一个 Set 可以迭代的条目。

如果你想遍历Tuple2&lt;Integer, Double&gt; 对象,你必须转换Entry 对象。为此,您可以 e. G。将您的 Set 转换为 Stream

一步一步:

Stream<Entry<Integer, Double>> myEntryStream = myMap.entrySet().stream();
Stream<Tuple2<Integer, Double>> myTuple2Stream = myEntryStream.map(entry -> new Tuple2(entry.getKey(), entry.getValue()));

或者干脆

Stream<Tuple2<Integer, Double>> myStream = myMap.entrySet().stream().map(entry -> new Tuple2(entry.getKey(), entry.getValue()));

要对此进行迭代,您可以这样做

Iterable<Tuple2<Integer, Double>> it = myStream::iterator;

或者只是

for (Tuple2<Integer, Double> item: (Iterable<Tuple2<Integer, Double>>) myStream::iterator) {
    // do sth with item
}

如果你的Tuple2,不管它是什么,有一个构造函数接受Map.Entry,你甚至可以这样做

.map(Tuple2::new)

为了实现你的目标。

【讨论】:

  • 感谢人!你真的帮了大忙!
  • 将流转换回Iterable 不是很方便,如果您想以for 循环样式执行操作,使用myMap.forEach((key,value) -&gt; /*your code using key and value*/}); 更容易,甚至可能使Tuple 类的使用已过时。
  • Holger - 不,我使用函数,它将Iterable 作为参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 2019-05-05
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 2010-11-20
相关资源
最近更新 更多