前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java8 Stream流的终端操作

Java8 Stream流的终端操作

作者头像
喜欢天文的pony站长
发布于 2020-10-09 07:31:02
发布于 2020-10-09 07:31:02
72700
代码可运行
举报
文章被收录于专栏:RabbitMQ实战RabbitMQ实战
运行总次数:0
代码可运行
  • Java8提供的Stream支持两种操作
    • 一种是中间操作,如filter, map, skip, limit...
    • 另外一种是终端操作,如count, findFirst, forEach和reduce...

中间操作不会消耗流,只是将一个流转换成另外一个流,类似于流水线。

终端操作会消耗流,以产生一个最终结果,终端操作完成后,流就被消耗了,不可再调用相关操作流的方法。

  • Collectors预定义好的部分终端操作

Collectors终端操作

一、 规约与汇总

1. 查找流中的最大值和最小值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {
    Random random = new Random();
    Optional<Integer> minVal = Stream.generate(() -> random.nextInt(1000))
            .limit(100)
            .collect(Collectors.minBy(Comparator.comparingInt(x -> x)));

    minVal.ifPresent(System.out::println);

    Optional<Integer> maxVal = Stream.generate(() -> random.nextInt(1000))
            .limit(100)
            .collect(Collectors.maxBy(Comparator.comparingInt(x -> x)));
    maxVal.ifPresent(x -> System.out.println("生成的最大随机值为: " + x));

    //或或或或或或或或或或或或或或或或或或或或
    Optional<Integer> maxVal2 = Stream.generate(() -> random.nextInt(1000))
            .limit(100)
            .max(Comparator.comparingInt(x -> x));
}

2. 求和,计算平均值与结果收集器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void sumAvg() {
    Random random = new Random();
    // 生成1000范围内的数字的方法
    Supplier<Integer> integerSupplier = () -> random.nextInt(1000);
    // 生成1000个1000以内的数字,并返回一个列表
    List<Integer> integerList = Stream.generate(integerSupplier)
            .limit(1000)
            .collect(Collectors.toList());

    // 求和操作
    Integer sum = integerList.stream()
            .collect(Collectors.summingInt(x -> x));
    System.out.println("求和结果: " + sum);

    // 计算平均值操作
    Double avg = integerList.stream()
            .collect(Collectors.averagingDouble(x -> x));
    System.out.println("平均值为: " + avg);
}
  • 结果:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
求和结果: 514905
平均值为: 514.905
  • 在需要同时获取流中元素的个数,求和,平均值,最大值,最小值时,可使用收集器XxxSummaryStatistics
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DoubleSummaryStatistics summaryStatistics = integerList.stream()
        .collect(Collectors.summarizingDouble(x -> x));

long count = summaryStatistics.getCount();
double average = summaryStatistics.getAverage();
double max = summaryStatistics.getMax();
double min = summaryStatistics.getMin();
double sumResult = summaryStatistics.getSum();

System.out.println(count);
System.out.println(average);
System.out.println(max);
System.out.println(min);
System.out.println(sumResult);
// XxxSummaryStatistics重写了toString()方法
System.out.println(summaryStatistics);
  • 结果:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1000
514.905
999.0
0.0
514905.0
DoubleSummaryStatistics{count=1000, sum=514905.000000, min=0.000000, average=514.905000, max=999.000000}

3. 连接并返回字符串Collectors.join(delimiter)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void joinDemo() {
    AppleStream chinaApple = new AppleStream(10, "中国");
    AppleStream usApple = new AppleStream(20, "米国");
    AppleStream koreaApple = new AppleStream(30, "韩国");

    String joinResult = Stream.of(chinaApple, usApple, koreaApple)
            // 需要将流转换成Stream<String>
            .map(AppleStream::toString)
            .collect(Collectors.joining(",", "【", "】"));
    System.out.println(joinResult);

    System.out.println(IntStream.rangeClosed(1, 20)
            .mapToObj(String::valueOf)
            .collect(Collectors.joining(",", "", "")));
}
  • 结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
【AppleStream(weight=10, country=中国),AppleStream(weight=20, country=米国),AppleStream(weight=30, country=韩国)1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

4. 自定义规约操作:广义上的规约汇总

  • Collectors.reducing(U identity, Function<? super T, ? extends U> mapper, BinaryOperator<U> op)
    • 参数U identity 规约起始值,当流中没有元素时也会返回这个值。
    • 参数Function<? super T, ? extends U> mapper 在执行参数3方法之前对流中的元素进行的操作。
    • 参数BinaryOperator<U> opR apply(T t, U u),接收两个参数,并返回经过处理之后的值。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void reduceDemo() {
    Apple chinaApple = new Apple(10, "中国");
    Apple usApple = new Apple(20, "米国");
    Apple koreaApple = new Apple(30, "韩国");

    //重量最大的苹果
    Optional<Apple> maxWeightApple = Stream.<Apple>of(chinaApple, usApple, koreaApple)
            .collect(Collectors.reducing((x1, x2) -> x1.getWeight() > x1.getWeight() ? x1 : x2));
    maxWeightApple.ifPresent(System.out::println);

    // 最小的重量
    Integer minVal = Stream.of(chinaApple, usApple, koreaApple)
            .collect(Collectors.reducing(0, Apple::getWeight, Integer::min));
    System.out.println(minVal);

    // 质量总和
    Integer sumVal = Stream.of(chinaApple, usApple, koreaApple)
            .collect(Collectors.reducing(0, Apple::getWeight, Integer::sum));
    System.out.println(sumVal);
}

二、 分组

  • Collectors.groupingBy() 1. 分组
    • demo(一级分组): 根据规则 质量<=20为优秀,质量>20为一般 将apple进行分组。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

/**
 * 质量标准
 */
enum Quality {
    /**
     * 上乘
     */
    PERFECT,
    /**
     * 普通
     */
    NORMAL;
}

public void groupByDemo() {
    Apple chinaApple = new Apple(10, "中国");
    Apple usApple = new Apple(20, "米国");
    Apple koreaApple = new Apple(30, "韩国");
    Apple japanApple = new Apple(40, "日本");

    Map<Quality, List<Apple>> appleQualityMap = Stream.of(chinaApple, usApple, koreaApple, japanApple)
            .collect(Collectors.groupingBy(curApple -> {
                // 质量<=20为优秀,质量>20为一般
                if (curApple.getWeight() <= 20) {
                    return Quality.PERFECT;
                } else {
                    return Quality.NORMAL;
                }
            }));

    System.out.println(JSON.toJSONString(appleQualityMap, true));
}
  • 结果:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "NORMAL": [
    {
      "country": "韩国",
      "weight": 30
    },
    {
      "country": "日本",
      "weight": 40
    }
  ],
  "PERFECT": [
    {
      "country": "中国",
      "weight": 10
    },
    {
      "country": "米国",
      "weight": 20
    }
  ]
}
  • 多级分组
    • 先根据质量进行分组,再根据国家进行分组
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void groupByDemo() {
    Apple chinaApple = new Apple(10, "中国");
    Apple chinaAppleEnhance = new Apple(100, "中国");
    Apple chinaAppleDoubleEnhance = new Apple(1000, "中国");

    Apple usApple = new Apple(20, "米国");

    Apple koreaApple = new Apple(30, "韩国");

    Apple japanApple = new Apple(40, "日本");
    Apple japanAppleEnhance = new Apple(80, "日本");
    Apple japanAppleDoubleEnhance = new Apple(120, "日本");

    Map<Quality, Map<String, List<Apple>>> appleQualityMap = Stream.of(chinaApple, chinaAppleEnhance, chinaAppleDoubleEnhance, usApple, koreaApple, japanApple, japanAppleEnhance, japanAppleDoubleEnhance)
            .collect(Collectors.groupingBy(curApple -> {
                // 质量<=20为优秀,质量>20为一般
                if (curApple.getWeight() <= 20) {
                    return Quality.PERFECT;
                } else {
                    return Quality.NORMAL;
                }
                // 再根据质量进行分组后再根据国家进行分组
            }, Collectors.groupingBy(Apple::getCountry)));


    System.out.println(JSON.toJSONString(appleQualityMap, true));
}
  • 结果
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "NORMAL": {
    "韩国": [
      {
        "country": "韩国",
        "weight": 30
      }
    ],
    "中国": [
      {
        "country": "中国",
        "weight": 100
      },
      {
        "country": "中国",
        "weight": 1000
      }
    ],
    "日本": [
      {
        "country": "日本",
        "weight": 40
      },
      {
        "country": "日本",
        "weight": 80
      },
      {
        "country": "日本",
        "weight": 120
      }
    ]
  },
  "PERFECT": {
    "米国": [
      {
        "country": "米国",
        "weight": 20
      }
    ],
    "中国": [
      {
        "country": "中国",
        "weight": 10
      }
    ]
  }
}
  • 注意:可以无限叠加层N层Map哟。

2. 按子组收集数据(指定用于处理子组数据的函数)

  • 观察源码发现,我们使用最多的接收一个参数的groupingBy()方法其实:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static <T, K> Collector<T, ?, Map<K, List<T>>>
    groupingBy(Function<? super T, ? extends K> classifier) {
        return groupingBy(classifier, toList());
    }

默认第二个参数是Collectors.toList(),实际上可以替换成我们需要的方法,如计算子组的数量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void groupByDemo() {
    Apple chinaApple = new Apple(10, "中国");
    Apple chinaAppleEnhance = new Apple(100, "中国");
    Apple chinaAppleDoubleEnhance = new Apple(1000, "中国");

    Apple usApple = new Apple(20, "米国");

    Apple koreaApple = new Apple(30, "韩国");

    Apple japanApple = new Apple(40, "日本");
    Apple japanAppleEnhance = new Apple(80, "日本");
    Apple japanAppleDoubleEnhance = new Apple(120, "日本");

    Map<Quality, Long> qualityLongMap = Stream.of(chinaApple, chinaAppleEnhance, chinaAppleDoubleEnhance, usApple, koreaApple, japanApple, japanAppleEnhance, japanAppleDoubleEnhance)
            .collect(Collectors.groupingBy(curApple -> {
                // 质量<=20为优秀,质量>20为一般
                if (curApple.getWeight() <= 20) {
                    return Quality.PERFECT;
                } else {
                    return Quality.NORMAL;
                }
                // 再根据质量进行分组后再计算每组的元素的个数
            }, Collectors.counting()));
    System.out.println(JSON.toJSONString(qualityLongMap, true));
}
  • 结果:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "PERFECT": 2,
  "NORMAL": 6
}
  • demo2: 先按质量分组,将子组List中的国家名字拼成String打印出来。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void groupByDemo() {
    Apple chinaApple = new Apple(10, "中国");
    Apple usApple = new Apple(20, "米国");
    Apple koreaApple = new Apple(30, "韩国");
    Apple japanApple = new Apple(40, "日本");

    Map<Quality, String> qualityCountryMap = Stream.of(chinaApple, usApple, koreaApple, japanApple)
            .collect(Collectors.groupingBy(curApple -> {
                // 质量<=20为优秀,质量>20为一般
                if (curApple.getWeight() <= 20) {
                    return Quality.PERFECT;
                } else {
                    return Quality.NORMAL;
                }
                // 再将相应分组的国家的名字打印出来
            }, Collectors.mapping(Apple::getCountry, Collectors.joining(","))));
    System.out.println(JSON.toJSONString(qualityCountryMap, true));
}
  • 结果:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "PERFECT": "中国,米国",
  "NORMAL": "韩国,日本"
}
  • demo3: 将子组的结果转换成另外一种格式collectingAndThen()

要求: 先根据apple的weight进行分组,再将每组中weight最大的apple找出来,再返回每组最大的apple的weight,即返回Map<quality, maxWeight>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void groupByDemo() {
    Apple chinaApple = new Apple(10, "中国");
    Apple usApple = new Apple(20, "米国");
    Apple koreaApple = new Apple(30, "韩国");
    Apple japanApple = new Apple(40, "日本");

    Map<Quality, Integer> qualityCountryMap = Stream.of(chinaApple, usApple, koreaApple, japanApple)
            .collect(Collectors.groupingBy(curApple -> {
                // 质量<=20为优秀,质量>20为一般
                if (curApple.getWeight() <= 20) {
                    return Quality.PERFECT;
                } else {
                    return Quality.NORMAL;
                }
            }, Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingInt(Apple::getWeight)), (optionalApple) -> optionalApple.get().getWeight())));

    System.out.println(JSON.toJSONString(qualityCountryMap, true));
}
  • 结果:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "NORMAL":40,
    "PERFECT":20
}

三、分区 partitioningBy()

分区是分组的一种特殊情况,分区返回的Map的keys只有truefalse。其他用法与groupingBy基本一致。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void partitioningByDemo() {
    Apple chinaApple = new Apple(10, "中国");
    Apple usApple = new Apple(20, "米国");
    Apple koreaApple = new Apple(30, "韩国");
    Apple japanApple = new Apple(40, "日本");

    Map<Boolean, String> appleQualityCountryMap = Stream.of(chinaApple, usApple, korea  Apple, japanApple)
            //以质量20为分界线进行分区,将分区之后的apple的原产地的国家返回
            .collect(Collectors.partitioningBy(x -> x.getWeight() > 20, Collectors.mapping(Apple::getCountry, Collectors.joining(","))));
    System.out.println(JSON.toJSONString(appleQualityCountryMap, true));
}
  • 结果:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "false": "中国,米国",
  "true": "韩国,日本"
}
> 如何自定义Collector?

欢迎在评论区留下你看文章时的思考,及时说出,有助于加深记忆和理解,还能和像你一样也喜欢这个话题的读者相遇~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 喜欢天文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
重要突破!大连理工大学团队实现「线驱动连续型机器人多模态感知」登国际权威期刊
大数据文摘转载自机器人大讲堂 你知道什么是连续型机器人吗?这类机器人可以称得上是机器人中的“眼镜蛇”,以其强悍的灵活性和柔顺性著称。它们在医疗介入手术、狭小空间检测、工业及生活辅助等非结构化环境中具有十分广泛的应用场景。 例如用于微创手术的达芬奇Vinci SP介入手术机器人、美国Tesla公司的蛇形充电机器人以及德国Festo公司的柔性机械臂等。 那么问题来了,同是机器人,为什么它们这么灵活?原因在于连续型机器人通过颠覆传统刚性机械臂的结构设计,使得自身具备大量冗余“自由度”,进而实现灵活运动和柔顺变
大数据文摘
2023/04/10
6380
重要突破!大连理工大学团队实现「线驱动连续型机器人多模态感知」登国际权威期刊
以折纸为灵感的中式浪漫,南开大学新型软体机器人斩获国际大奖!
大数据文摘授权转载自机器人大讲堂 如果给你一张纸,你可以叠出什么? 折纸艺术作为中华民族的文化瑰宝之一,具有独特艺术价值,其内涵丰富的空间构型,历史可追溯到公元前五百多年。同时,这门古老的艺术也为科研人员研发智能机器人系统提供了宝贵的素材。 近日,南开大学师生提出一种基于折纸结构的软体机器人,并探索了该软体机器人的结构设计与系统建模,让折纸艺术“活”了起来! ▍新成果斩获国际大奖 该项研究工作以论文“折纸连续体机器人的设计与分析”(“Design and Analysis of a Yoshimura
大数据文摘
2023/04/10
3960
以折纸为灵感的中式浪漫,南开大学新型软体机器人斩获国际大奖!
真实再现生物脊柱功能,老鼠机器人也能像杰瑞一样灵活,Science Robotics 发布老鼠机器人最新研究成果
12 月 7 日,国际知名学术期刊《Science Robotics》发表来自德国慕尼黑工业大学和中山大学的研究团队的研究文章——「Lateral Flexion of a Compliant Spine Improves Motor Performance in a Bio-Inspired Mouse Robot」。
机器之心
2023/12/12
2420
真实再现生物脊柱功能,老鼠机器人也能像杰瑞一样灵活,Science Robotics 发布老鼠机器人最新研究成果
让机器人的触觉感官更灵敏、稳定、高效,腾讯Robotics X在传感器上火力全开
智能机器人要走进家庭,与人类安全地交互、灵巧操作各种物体,触觉感知是基础。触觉传感器相当于机器人的“电子皮肤”,通过测量传感器与环境的物理交互产生的信息,模仿生物皮肤的触觉感知,是机器人实现智能化的必备条件。
机器之心
2022/12/16
1.1K0
让机器人的触觉感官更灵敏、稳定、高效,腾讯Robotics X在传感器上火力全开
打造属于机器人的触觉感官,腾讯Robotics X实验室做到了更快、更轻、更准
机器人已经成为现代生产生活中的重要组成部分,如工业机器人、家用机器人等。机器人成为了人类功能的延伸,而在对智能机器人的长期追求中,人们设想赋予机器人类人的五感,即视觉、触觉、听觉、嗅觉和味觉,尤以视觉和触觉最为重要。过去几十年,计算机视觉和图像传感器等技术在机器人领域取得了巨大进步,但触觉能力相对落后。
机器之心
2022/12/16
1.4K0
打造属于机器人的触觉感官,腾讯Robotics X实验室做到了更快、更轻、更准
学界 | 这2亿人民币或将奠定中国机器人理论基础
2018 年 4 月 26-27 日,首届国家自然科学基金重大研究计划「共融机器人基础理论与关键技术研究」学术交流会在中国北方车辆研究所举行,有 200 多名国内机器人领域的顶级专家与会。
AI科技评论
2018/07/27
7600
学界 | 这2亿人民币或将奠定中国机器人理论基础
CBS|南航等高校团队研发新型壁虎机器人中枢神经控制策略
最近,来自南京航空航天大学等高校的团队研发了一种新型的壁虎机器人中枢神经控制策略,该项研究以论文A neural coordination strategy for attachment and detachment of a climbing robot inspired by gecko locomotion为题发表于中国科技期刊卓越行动计划高起点新刊Cyborg and Bionic Systems 。 论文地址:https://spj.science.org/doi/10.34133/cbsyst
大数据文摘
2023/05/09
2860
CBS|南航等高校团队研发新型壁虎机器人中枢神经控制策略
机器人&quot;变形金刚&quot;来了!东京大学新研究让多机器人系统在复杂地形自由切换&quot;软硬模式&quot;
代码链接:https://wyd0817.github.io/project-mrs-cwc/
一点人工一点智能
2025/05/22
990
机器人&quot;变形金刚&quot;来了!东京大学新研究让多机器人系统在复杂地形自由切换&quot;软硬模式&quot;
工业机器人的主要部件、材料、构形与控制系统
一、工业机器人的主要组成部分 1、机器人驱动装置 概念:要使机器人运行起来, 需给各个关节即每个运动自由度安置传动装置 作用:提供机器人各部位、各关节动作的原动力。 驱动系统:可以是液压传动、气动传动
机器人网
2018/04/12
3.9K0
工业机器人的主要部件、材料、构形与控制系统
人工智能遇见医疗机器人
今天为大家介绍的是来自多位作者合著的一篇关于医疗机器人展望的论文。人工智能(AI)在医疗机器人中的应用为医学带来了一个新时代。先进的医疗机器人可以进行诊断和手术程序,辅助康复,并提供共生义肢来替代肢体。这些设备使用的技术包括计算机视觉、医学图像分析、触觉反馈、导航、精确操控和机器学习(ML),可以使自主机器人进行诊断成像、远程手术、手术子任务,甚至整个手术过程。此外,康复设备和先进义肢中的人工智能可以提供个性化支持,以及改善功能和移动性。机器人技术、医学、材料科学和计算能力的巨大进展相结合,有望在未来带来更安全、更高效、更广泛可用的患者护理。
DrugAI
2023/09/19
4250
人工智能遇见医疗机器人
攻城狮必读 | 一文详解,工业机器人结构、驱动及技术
此文将工业机器人结构、驱动及技术指标描述很为详尽,值得细看! 一、常用运动学构形 1、笛卡尔操作臂 优点:很容易通过计算机控制实现,容易达到高精度。 缺点:妨碍工作, 且占地面积大, 运动速度
机器人网
2018/04/25
1.3K0
攻城狮必读 | 一文详解,工业机器人结构、驱动及技术
机器人行业的六大颠覆技术盘点
据英国媒体报道,该国布里斯托尔一家刚刚建成的医院,最近引入一批名为“自动导航运载仪”(AGV)的机器人,主要负责把厨房为病人准备的食物,由厨房运至病人手上。这些机器人能自行进行准备工作,如运送冷冻的食
机器人网
2018/04/19
5920
机器人行业的六大颠覆技术盘点
大象机器人开源协作机械臂myCobot 630 全面升级!
在快速发展的机器人技术领域中,Elephant Robotics的myCobot 600已经证明了其在教育、科研和轻工业领域的显著适用性。作为一款具备六自由度的机械臂,myCobot 600以其600mm的工作半径和2kg的末端负载能力,满足了多样化的操作需求。然而,其原有设计中采用的三个伺服电机和三个谐波减速器的组合,在某些应用场景中表现出了性能的局限性。
大象机器人
2024/04/28
4220
大象机器人开源协作机械臂myCobot 630 全面升级!
仿生蚂蚁机器人面世,分工协力搬重物,跳高跨栏都能行丨Nature
它的创造灵感来源于蚂蚁,堪称“机械蚁”,就像一个全能运动员一样,能跑,能跨栏,能像体操运动员一样稳稳地翻跟头,还能跳高,弹跳高度足以达到自己的身高的2.5倍。
量子位
2019/07/17
1K0
仿生蚂蚁机器人面世,分工协力搬重物,跳高跨栏都能行丨Nature
布里斯托大学与比萨大学联合研发拟人化机械手,可模仿人类手势实现自适应抓握!
机械手Tactile SoftHand-A采用了双肌腱设计,允许主动控制特定的关节(远端或近端指间关节),从而调整手的抓握姿势。此外,研究团队还开发了一种新型的全3D打印触觉传感器设计,该设计无需手部组装,可直接作为机械手指的一部分进行打印。这种传感器被集成在指尖中,并与拮抗肌腱机制相结合,共同构成了一种人手引导的触觉反馈抓握系统。该系统能够主动模仿人类手势,在接触时自适应稳定抓握姿势,并在检测到滑动后调整抓握姿势以防止物体移动。
脑机接口社区
2024/07/17
2410
布里斯托大学与比萨大学联合研发拟人化机械手,可模仿人类手势实现自适应抓握!
天才少年稚晖君首秀,官宣智元人形机器人!小米最强铁蛋2比狗更狗只卖12999
昨晚,稚晖君在微博上发出预告:智元具身智能机器人「远征 A1」,将于8月18日发布。
新智元
2023/09/09
3330
天才少年稚晖君首秀,官宣智元人形机器人!小米最强铁蛋2比狗更狗只卖12999
机器人与触觉传感技术的碰撞,一文初探人类与机器人的触觉传感
触摸(Touch)是人类在进行协调交互时的主要方式之一。通过触摸感知到的触觉(Sense of Touch)可以帮助人类评估物体的属性,如大小、形状、质地、温度等。此外,还可以利用触觉来检测物体的滑脱,进而发展人类对身体的认识。触觉将压力、振动、疼痛、温度等多种感觉信息传递给中枢神经系统,帮助人类感知周围环境,避免潜在的伤害。研究表明,与视觉和听觉相比,人类的触觉在处理物体的物质特征和细节形状方面更胜一筹。
机器之心
2020/09/10
2.7K0
机器人与触觉传感技术的碰撞,一文初探人类与机器人的触觉传感
国际机器人与自动化大会重点推介的20种创新机器人技术
最近在瑞典斯德哥尔摩召开的“国际机器人与自动化大会”(ICRA)向世人展示了该领域最新的设计和创意理念,从飞行运输、环保检测、工业制造到休闲生活娱乐,形形色色的机器人几乎覆盖了生产生活的各个领域。 不过,外行看热闹,内行看门道。美国电气与电子工程师协会(IEEEE)《光谱》杂志从专业角度,介绍了会展中的20种机器人技术,设计重点在于以创新方案解决目前机器人应用中的一些难题,主要集中在控制、传感、驱动、操作、抓握、义肢、人形机平衡、外骨骼、飞行取物、人工智能、虚拟现实、组织微型机器人团队等方面。 1.以视觉触
机器人网
2018/04/23
1.2K0
国际机器人与自动化大会重点推介的20种创新机器人技术
“智能+”助跑未来,机器人正从科幻走进日常!
3月5日,第十三届全国人民代表大会第二次会议开幕,国务院总理李克强在政府工作报告中首次提出了“智能+”。与此同时,人工智能已经连续三年在政府工作报告中被提及。而在刚刚发布的2019年政府工作报告中也有强调:“坚持创新引领发展,培育壮大新动能,促进新旧动能持续转换,深化大数据、人工智能等研发的应用,健全以企业为主体的产学研一体化创新机制”。
AiTechYun
2019/05/13
5420
“智能+”助跑未来,机器人正从科幻走进日常!
CoRL2021落幕:多模态通向机器人智慧,无模型框架拥抱现实应用
经济学家熊彼特认为,所谓创新就是要”建立一种新的生产函数”,即"生产要素的重新组合”, 就是要把一种从来没有的关于生产要素和生产条件的“新组合”引进生产体系中去,以实现对生产要素或生条件的“新组合”。目前,机器人就是新的生产要素,要妥帖地缝合在社会生活中。
AI科技评论
2021/12/02
5220
CoRL2021落幕:多模态通向机器人智慧,无模型框架拥抱现实应用
推荐阅读
重要突破!大连理工大学团队实现「线驱动连续型机器人多模态感知」登国际权威期刊
6380
以折纸为灵感的中式浪漫,南开大学新型软体机器人斩获国际大奖!
3960
真实再现生物脊柱功能,老鼠机器人也能像杰瑞一样灵活,Science Robotics 发布老鼠机器人最新研究成果
2420
让机器人的触觉感官更灵敏、稳定、高效,腾讯Robotics X在传感器上火力全开
1.1K0
打造属于机器人的触觉感官,腾讯Robotics X实验室做到了更快、更轻、更准
1.4K0
学界 | 这2亿人民币或将奠定中国机器人理论基础
7600
CBS|南航等高校团队研发新型壁虎机器人中枢神经控制策略
2860
机器人&quot;变形金刚&quot;来了!东京大学新研究让多机器人系统在复杂地形自由切换&quot;软硬模式&quot;
990
工业机器人的主要部件、材料、构形与控制系统
3.9K0
人工智能遇见医疗机器人
4250
攻城狮必读 | 一文详解,工业机器人结构、驱动及技术
1.3K0
机器人行业的六大颠覆技术盘点
5920
大象机器人开源协作机械臂myCobot 630 全面升级!
4220
仿生蚂蚁机器人面世,分工协力搬重物,跳高跨栏都能行丨Nature
1K0
布里斯托大学与比萨大学联合研发拟人化机械手,可模仿人类手势实现自适应抓握!
2410
天才少年稚晖君首秀,官宣智元人形机器人!小米最强铁蛋2比狗更狗只卖12999
3330
机器人与触觉传感技术的碰撞,一文初探人类与机器人的触觉传感
2.7K0
国际机器人与自动化大会重点推介的20种创新机器人技术
1.2K0
“智能+”助跑未来,机器人正从科幻走进日常!
5420
CoRL2021落幕:多模态通向机器人智慧,无模型框架拥抱现实应用
5220
相关推荐
重要突破!大连理工大学团队实现「线驱动连续型机器人多模态感知」登国际权威期刊
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档