Java中构造嵌套Tuple2以存储图顶点的三个属性
构造嵌套Tuple2存储顶点的id、权重和标签
没问题,我来帮你搞定这个嵌套Tuple2的构造需求!你原来的代码只存了id和weight,现在要加入label,只需要把外层Tuple2的第二个元素换成另一个Tuple2,用来同时存放weight和label就行。
直接可用的代码示例
这里假设你的label是字符串类型(如果是其他类型,直接替换成对应类型即可):
import com.google.common.collect.Lists; import scala.Tuple2; List<Tuple2<Long, Tuple2<Integer, String>>> vertices = Lists.newArrayList( new Tuple2<>(1L, new Tuple2<>(0, "Vertex A")), new Tuple2<>(2L, new Tuple2<>(Integer.MAX_VALUE, "Vertex B")), new Tuple2<>(3L, new Tuple2<>(Integer.MAX_VALUE, "Vertex C")), new Tuple2<>(4L, new Tuple2<>(Integer.MAX_VALUE, "Vertex D")) );
代码说明
- 外层
Tuple2的第一个元素是顶点的id(这里用Long类型,比原代码的Object更具体,避免后续强制转换) - 外层
Tuple2的第二个元素是一个嵌套的Tuple2:- 嵌套
Tuple2的第一个元素是weight(保持你原有的Integer类型) - 嵌套
Tuple2的第二个元素是label(这里用String示例,你可以根据实际需求换成Enum、自定义类等任意类型)
- 嵌套
如何访问这些值
如果要取出某个顶点的三个属性,直接通过_1()和_2()方法逐层获取即可,因为用了具体类型,不需要强制转换,更安全:
// 获取第一个顶点的属性 Tuple2<Long, Tuple2<Integer, String>> firstVertex = vertices.get(0); Long vertexId = firstVertex._1(); Integer vertexWeight = firstVertex._2()._1(); String vertexLabel = firstVertex._2()._2();
如果你必须保留Object类型(不推荐)
如果因为某些原因需要保持原代码的Object类型,也可以这样写,但后续访问需要强制转换:
List<Tuple2<Object, Tuple2<Integer, Object>>> vertices = Lists.newArrayList( new Tuple2<>(1L, new Tuple2<>(0, "Vertex A")), new Tuple2<>(2L, new Tuple2<>(Integer.MAX_VALUE, 3)), // 这里label用Integer示例 new Tuple2<>(3L, new Tuple2<>(Integer.MAX_VALUE, true)), // label用Boolean示例 new Tuple2<>(4L, new Tuple2<>(Integer.MAX_VALUE, "Vertex D")) );
访问时:
Tuple2<Object, Tuple2<Integer, Object>> vertex = vertices.get(1); Long id = (Long) vertex._1(); Integer weight = vertex._2()._1(); Integer label = (Integer) vertex._2()._2(); // 这里根据实际类型强制转换
内容的提问来源于stack exchange,提问作者onr
相关产品推荐
相关产品推荐

