加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Groovy学习笔记——同时迭代多个List

发布时间:2020-12-14 16:52:46 所属栏目:大数据 来源:网络整理
导读:转自: http://johnnyjian.iteye.com/blog/271554 假设我们有这样两个List:? Java代码?? def?list1?=?[ 1 ,? 2 ,0)">3 ]?? def?list2?=?[ 4 ,0)">5 ,0)">6 ]?? 我们需要检查是否第二个List的每个元素都比第一个List的对应元素大,最直接的想法是,迭代第一
转自: http://johnnyjian.iteye.com/blog/271554
假设我们有这样两个List:?
Java代码??

收藏代码

  1. def?list1?=?[1,?2,0)">3]??
  2. def?list2?=?[4,0)">5,0)">6]??

我们需要检查是否第二个List的每个元素都比第一个List的对应元素大,最直接的想法是,迭代第一个List,然后通过下标访问第二个List:?
def?result?=?true??
  • list1.eachWithIndex?{?n,?i?->??
  • ????if?(n?>=?list2[i])?result?=?false??
  • }??
  • assert?result??

  • 然而,这种方法不够直观,而且无法利用GDK本身提供的every方法。?
    实际上,我们可以利用 Collection.transpose()方法来实现:?
    assert?[list1,?list2].transpose().every?{?a,?b?->??
  • ????a?<?b??
  • }??

  • transpose()方法实际上就是数学中矩阵的转置,简单的来说就是行和列的交换:?
    assert?[[4],?[5],0)">3,0)">6]]?==?[list1,?list2].transpose()??

    transpose()不止可以用于两个List,还能用于多个List。譬如,我们有第三个List:?
    def?list3?=?[7,0)">8,0)">9]??

    我们可以这样检查是否满足“list3 > list2 > list1”(每个对应的元素):?
    ????a?<?b?&&?b?<?c??
  • 7],0)">8],0)">6,0)">9]]?==?[list1,?list3].transpose()??

  • 有一点需要注意的是,如果List的长度不一,则取最短的长度:?
    def?list4?=?[1]??
  • def?list5?=?[2]??
  • 2],0)">2]]?==?[list4,?list5].transpose()??
  • 以上代码在Groovy 1.5.7下测试通过。

    (编辑:李大同)

    【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

      推荐文章
        热点阅读