Java中的数组,列表,集合,映射,元组,记录文字

有时,当我对JavaScript的强大功能和表现力感到兴奋时,我发现自己错过了Java世界中的一两个功能。 除了lambda表达式/闭包或任何您想称为“匿名函数”的东西之外,它还对数组,数组,列表,集合,映射等常见数据类型使用了高级文字。在JavaScript中,没有人会考虑构造一个这样的常量映射:
var map = new Object();
map["a"] = 1;
map["b"] = 2;
map["c"] = 3;

相反,您可能会写

var map = { "a":1, "b":2, "c":3 };

具体来说,当将复杂参数传递给API函数时,这实际上是一种非常方便的语法。

Java中的这些东西呢?

我最近发布了一种解决方法,您可以在这里使用Arrays.asList(…)创建“列表文字”:

http://blog.jooq.org/2011/10/28/javas-arrays-aslist-is-underused/

这样就可以了。 在分配数组时,还可以使用数组文字构造数组。 但是您不能将数组文字传递给方法:

// This will work:
int[] array = { 1, 2, 3 };

// This won't:
class Test {
  public void callee(int[] array) {}
  public void caller() {
    // Compilation error here:
    callee({1, 2, 3});
  }
}

Brian Goetz在lambda-dev上提到了各种文字

错过了很长一段时间后,我很高兴阅读lambda-dev邮件列表中的Brian Goetz关于它们的提及:

http://mail.openjdk.java.net/pipermail/lambda-dev/2012-May/004979.html

他列出的想法是:

#[ 1, 2, 3 ]                          // Array, list, set
#{ "foo" : "bar", "blah" : "wooga" }  // Map literals
#/(\d+)$/                             // Regex
#(a, b)                               // Tuple
#(a: 3, b: 4)                         // Record
#"There are {foo.size()} foos"        // String literal

不幸的是,他还添加了以下免责声明:

并不是说我们会立即(或永远)拥抱所有这些

显然,在Java 8当前Java语言发展的现阶段,他不能保证将来会增加什么。 但是从jOOQ的角度来看,能够声明元组和记录文字(具有适当的支持语言的支持,支持这种类型!)的想法非常令人激动。 想象一下选择任意元组/记录及其关联的索引/类型,列/类型对。 想象一下在Java或Scala中这样的构造(使用jOOQ):

// For simplicity, I'm using Scala's val operator here,
// indicating type inference. It's hard to guess what true
// record support in the java language should look like
for (val record : create.select(
                           BOOK.AUTHOR_ID.as("author"), 
                           count().as("books"))
                        .from(BOOK)
                        .groupBy(BOOK.AUTHOR_ID)
                        .fetch()) {
  
   // With true record support, you could now formally extract
   // values from the result set being iterated on. In other
   // words, the formal column alias and type is available to
   // the compiler:
   int author = record.author;
   int books = record.books;
}

显然,这只是推测,但是您可以看到,由于Java语言具有真正的元组/记录支持,因此Java Universe中将释放许多功能,这对所有现有的库和API都有很大的影响

敬请关注!

参考: Java,SQL和AND JOOQ博客上的JCG合作伙伴 Lukas Eder 用Java数组,列表,设置,映射,元组和记录文字


翻译自: https://www.javacodegeeks.com/2012/06/array-list-set-map-tuple-record.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值