Python 中的一些数据结构用 Java 该怎么写呢?

2020-12-18 10:50:06 +08:00
 gzk329
例如 field  = [] //python 列表
predefinedVars = [n, t, q, field] 
n, t, q 均为 int 

还有 tuple (predefinedVars, int)
像上面的 predefinedVars 和元组 这些用 java 该怎么表示?

2407 次点击
所在节点    Java
14 条回复
gzk329
2020-12-18 10:57:05 +08:00
import net.mindview.util.FourTuple;

new FourTuple<A, B, C, D>(a, b, c, d);
或者这个包能用吗?
Rwing
2020-12-18 11:04:24 +08:00
C#欢迎你
var predefinedVars = Tuple.Create(n, t, q, field);
zydxn
2020-12-18 11:08:24 +08:00
Python 的列表对应 Java 的 List (或者 Deque,如需要从两端操作的话),Java 没有元组,通过 List 的一些实现类可以实现不支持修改。

List<Integer> predefinedVars = Arrays.asList(1, 2, 3);

List<Integer> tuple1 = List.of(1, 2, 3);
List<Integer> tuple2 = Collections.unmodifiableList(predefinedVars);
gzk329
2020-12-18 11:11:07 +08:00
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package net.mindview.util;

public class TwoTuple<A, B> {
public final A first;
public final B second;

public TwoTuple(A a, B b) {
this.first = a;
this.second = b;
}

public String toString() {
return "(" + this.first + ", " + this.second + ")";
}
}
跟我想的不大一样。。。
Rwing
2020-12-18 11:19:18 +08:00
我错了,C#还有个语法糖可以直接这样:

var predefinedVars = (n, t, q, field);
INCerry
2020-12-18 11:19:23 +08:00
C#欢迎你

int n = 1;
int t = 2;
int q = 3;
var field = new []{4, 5, 6};
var predefinedVars = (n, t, q, field);

System.Console.WriteLine($"n:{predefinedVars.n}");
System.Console.WriteLine($"t:{predefinedVars.t}");
System.Console.WriteLine($"q:{predefinedVars.q}");
System.Console.WriteLine($"field:[{string.Join(',',predefinedVars.field)}]");

在线运行结果: https://sharplab.io/#v2:EYLgtghgzgLgpgJwDQxAgrgOwD4EtMwAEmhAvIQIwDcAsAFD5FHkBMtDBhAjmYQMzsAbhASEAZrjgAbACa9McAO6EA2gF0A3gBYkhAKy6AbAF8hIwgAcEcGXAkKZANRFReACky6YurronSZAEp2egABCgA6cIBONwASACJMEA0rGzt8G2cEKAjMYwTgsMiY+ITUVOtbeyyXCJgCorpwqIpYxK4UtOrMpzquRvYW0sT/WRAVDXCABgiAKQB7fDcAciQ17oyHbNyxoOM1QqogA
Cbdy
2020-12-18 11:35:11 +08:00
用 java.util.List
Jrue0011
2020-12-18 11:55:35 +08:00
看起来你像是在看 Thinking in Java 并用了它的包
EKkoGG
2020-12-18 11:57:43 +08:00
@INCerry
C# 这个着实简洁
gzk329
2020-12-18 13:48:11 +08:00
@Jrue0011 不是 哈哈 那个 TwoTuple 是我搜到的 我想写的是门限签名 只找到了 python 版的 后来找到百度的 go 版了
INCerry
2020-12-18 18:12:25 +08:00
@EKkoGG 可以试试 C#写起来很舒服
zzl22100048
2020-12-18 21:42:27 +08:00
元组用 vavr
mmdsun
2020-12-19 01:03:17 +08:00
tuple 用不可变 list 代替就行。

或者用 apache common Pair 包这个里面有 tuple


列表合并:
Stream.of(list1,list2)
.flatMap(x->x.stream())
.collect(ToList())


这种类似于 js 的扩展运算符?好像 Java 不支持。
dingwen07
2020-12-19 04:29:09 +08:00
既然知道每个位置的类型应该可以从 Object 转型

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736677

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX