V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gzk329
V2EX  ›  Java

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

  •  
  •   gzk329 · 2020-12-18 10:50:06 +08:00 · 2405 次点击
    这是一个创建于 1470 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如 field  = [] //python 列表
    predefinedVars = [n, t, q, field] 
    n, t, q 均为 int 
    
    还有 tuple (predefinedVars, int)
    像上面的 predefinedVars 和元组 这些用 java 该怎么表示?
    
    
    14 条回复    2020-12-19 04:29:09 +08:00
    gzk329
        1
    gzk329  
    OP
       2020-12-18 10:57:05 +08:00
    import net.mindview.util.FourTuple;

    new FourTuple<A, B, C, D>(a, b, c, d);
    或者这个包能用吗?
    Rwing
        2
    Rwing  
       2020-12-18 11:04:24 +08:00
    C#欢迎你
    var predefinedVars = Tuple.Create(n, t, q, field);
    zydxn
        3
    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
        4
    gzk329  
    OP
       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
        5
    Rwing  
       2020-12-18 11:19:18 +08:00
    我错了,C#还有个语法糖可以直接这样:

    var predefinedVars = (n, t, q, field);
    INCerry
        6
    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
        7
    Cbdy  
       2020-12-18 11:35:11 +08:00 via Android
    用 java.util.List
    Jrue0011
        8
    Jrue0011  
       2020-12-18 11:55:35 +08:00
    看起来你像是在看 Thinking in Java 并用了它的包
    EKkoGG
        9
    EKkoGG  
       2020-12-18 11:57:43 +08:00
    @INCerry
    C# 这个着实简洁
    gzk329
        10
    gzk329  
    OP
       2020-12-18 13:48:11 +08:00
    @Jrue0011 不是 哈哈 那个 TwoTuple 是我搜到的 我想写的是门限签名 只找到了 python 版的 后来找到百度的 go 版了
    INCerry
        11
    INCerry  
       2020-12-18 18:12:25 +08:00
    @EKkoGG 可以试试 C#写起来很舒服
    zzl22100048
        12
    zzl22100048  
       2020-12-18 21:42:27 +08:00 via iPhone
    元组用 vavr
    mmdsun
        13
    mmdsun  
       2020-12-19 01:03:17 +08:00 via Android
    tuple 用不可变 list 代替就行。

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


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


    这种类似于 js 的扩展运算符?好像 Java 不支持。
    dingwen07
        14
    dingwen07  
       2020-12-19 04:29:09 +08:00
    既然知道每个位置的类型应该可以从 Object 转型
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2786 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 13:30 · PVG 21:30 · LAX 05:30 · JFK 08:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.