将Map <integer,double =“”>转换为Iterable <tuple2 <integer,double =“”>&gt; </tuple2 <integer,> </integer,>

时间:2014-10-23 14:44:42

标签: map tuples java-8 iterable

我坚持使用Java-8中的数据转换......

有人知道如何将Map<Integer, Double>转换为Iterable<Tuple2<Integer, Double>>甚至是Map.Entry<Integer, Double> Tuple2<Integer, Double>到{{1}}?

谢谢!

1 个答案:

答案 0 :(得分:1)

Map<>Set<Map.Entry<K, V>> entrySet()方法。这为您提供了可以迭代的Set个条目。

如果要迭代Tuple2<Integer, Double>个对象,则必须转换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)

为了实现你的目标。