Carson带你学Android:手把手教你学会手势识别应用 GestureDetector

本文主要是介绍Carson带你学Android:手把手教你学会手势识别应用 GestureDetector,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

  • 手势识别在Android开发的应用非常常见
  • 今天carson将详细给大家讲解Android手势识别类:GestureDetector类的使用。(含实例讲解)

Carson带你学Android系列文章
Carson带你学Android:学习方法
Carson带你学Android:四大组件
Carson带你学Android:自定义View
Carson带你学Android:异步-多线程
Carson带你学Android:性能优化
Carson带你学Android:动画


目录


简介

下面,我将结合实例,详细介绍GestureDetector的使用接口 & 使用类。


接口1:OnGestureListener

1. 作用

检测用户在屏幕的以下操作:按下瞬间、按压、长按、轻击、快速滑屏、拖动

2. 使用步骤

// 步骤1:创建手势检测器实例 & 传入OnGestureListener接口(需要复写对应方法)
// 构造函数有3个,常用的是第二个
// 1. GestureDetector gestureDetector=new GestureDetector(GestureDetector.OnGestureListener listener);
// 2. GestureDetector gestureDetector=new GestureDetector(Context context,GestureDetector.OnGestureListener listener);
// 3. GestureDetector gestureDetector=new GestureDetector(Context context,GestureDetector.SimpleOnGestureListener listener);GestureDetector mGestureDetector = new GestureDetector(this, new GestureDetector.OnGestureListener() {// 1. 用户轻触触摸屏public boolean onDown(MotionEvent e) {Log.i("MyGesture", "onDown");return false;}// 2. 用户轻触触摸屏,尚未松开或拖动// 与onDown()的区别:无松开 / 拖动// 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress就会执行public void onShowPress(MotionEvent e) {Log.i("MyGesture", "onShowPress");}// 3. 用户长按触摸屏public void onLongPress(MotionEvent e) {Log.i("MyGesture", "onLongPress");}// 4. 用户轻击屏幕后抬起public boolean onSingleTapUp(MotionEvent e) {Log.i("MyGesture", "onSingleTapUp");return true;}// 5. 用户按下触摸屏 & 拖动public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {Log.i("MyGesture", "onScroll:");return true;}// 6. 用户按下触摸屏、快速移动后松开// 参数:// e1:第1个ACTION_DOWN MotionEvent// e2:最后一个ACTION_MOVE MotionEvent// velocityX:X轴上的移动速度,像素/秒// velocityY:Y轴上的移动速度,像素/秒public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {Log.i("MyGesture", "onFling");return true;}});// 步骤2-1:让某个View检测手势 - 重写View的onTouch函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应View.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {mGestureDetector.onTouchEvent(event);return true; // 注:返回true才能完整接收触摸事件}});// 步骤2-2:让某个Activity检测手势:重写Activity的dispatchTouchEvent函数,将触屏事件交给GestureDetector处理,从而对用户手势作出响应@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {mGestureDetector.onTouchEvent(ev); // 让GestureDetector响应触碰事件super.dispatchTouchEvent(ev); // 让Activity响应触碰事件return false;}

3. 实例说明

现在对一个TextView进行手势检测
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="600dp"android:text="carson_ho Test"android:textAppearance="?android:attr/textAppearanceLarge" /></LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {TextView mTextView;GestureDetector mGestureDetector;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 步骤1:创建手势检测器实例 & 传入OnGestureListener接口(需要复写对应方法)mGestureDetector = new GestureDetector(this, new GestureDetector.OnGestureListener() {// 1. 用户轻触触摸屏public boolean onDown(MotionEvent e) {Log.i("MyGesture", "onDown");return false;}// 2. 用户轻触触摸屏,尚未松开或拖动// 与onDown()的区别:无松开 / 拖动// 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress就会执行public void onShowPress(MotionEvent e) {Log.i("MyGesture", "onShowPress");}// 3. 用户长按触摸屏public void onLongPress(MotionEvent e) {Log.i("MyGesture", "onLongPress");}// 4. 用户轻击屏幕后抬起public boolean onSingleTapUp(MotionEvent e) {Log.i("MyGesture", "onSingleTapUp");return true;}// 5. 用户按下触摸屏 & 拖动public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {Log.i("MyGesture", "onScroll:");return true;}// 6. 用户按下触摸屏、快速移动后松开// 参数:// e1:第1个ACTION_DOWN MotionEvent// e2:最后一个ACTION_MOVE MotionEvent// velocityX:X轴上的移动速度,像素/秒// velocityY:Y轴上的移动速度,像素/秒public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {Log.i("MyGesture", "onFling");return true;}});// 步骤2:让TextView检测手势:重写View的onTouch函数,将触屏事件交给GestureDetector处理,从而对用户手势作出响应mTextView = (TextView) findViewById(R.id.textView);mTextView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {mGestureDetector.onTouchEvent(event);return false;}});}
}

4. 示意图

我在屏幕作出一系列手势进行测试


接口2:OnDoubleTapListener

1. 作用

检测用户单击、双击屏幕

2. 使用步骤

// 步骤1:创建手势检测器实例// 注:使用OnDoubleTapListener接口时,需要使用GestureDetector,而GestureDetector的创建则必须传入OnGestureListener接口// 所以在使用OnDoubleTapListener接口时,也必须实现OnGestureListener接口// 构造函数有3个,常用的是第二个// 1. GestureDetector gestureDetector=new GestureDetector(GestureDetector.OnGestureListener listener);// 2. GestureDetector gestureDetector=new GestureDetector(Context context,GestureDetector.OnGestureListener listener);// 3. GestureDetector gestureDetector=new GestureDetector(Context context,GestureDetector.SimpleOnGestureListener listener);GestureDetector mGestureDetector = new GestureDetector(this, new GestureDetector.OnGestureListener() {// 1. 用户轻触触摸屏public boolean onDown(MotionEvent e) {Log.i("MyGesture", "onDown");return false;}// 2. 用户轻触触摸屏,尚未松开或拖动// 与onDown()的区别:无松开 / 拖动// 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress就会执行public void onShowPress(MotionEvent e) {Log.i("MyGesture", "onShowPress");}// 3. 用户长按触摸屏public void onLongPress(MotionEvent e) {Log.i("MyGesture", "onLongPress");}// 4. 用户轻击屏幕后抬起public boolean onSingleTapUp(MotionEvent e) {Log.i("MyGesture", "onSingleTapUp");return true;}// 5. 用户按下触摸屏 & 拖动public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {Log.i("MyGesture", "onScroll:");return true;}// 6. 用户按下触摸屏、快速移动后松开// 参数:// e1:第1个ACTION_DOWN MotionEvent// e2:最后一个ACTION_MOVE MotionEvent// velocityX:X轴上的移动速度,像素/秒// velocityY:Y轴上的移动速度,像素/秒public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {Log.i("MyGesture", "onFling");return true;}});// 步骤2:创建 & 设置OnDoubleTapListener接口实现类mGestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {// 1. 单击事件// 关于OnDoubleTapListener.onSingleTapConfirmed()和 OnGestureListener.onSingleTapUp()的区别// onSingleTapConfirmed:再次点击(即双击),则不会执行// onSingleTapUp:手抬起就会执行public boolean onSingleTapConfirmed(MotionEvent e) {Log.i("MyGesture", "onSingleTapConfirmed");return false;}// 2. 双击事件public boolean onDoubleTap(MotionEvent e) {Log.i("MyGesture", "onDoubleTap");return false;}// 3. 双击间隔中发生的动作// 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件;public boolean onDoubleTapEvent(MotionEvent e) {Log.i("MyGesture", "onDoubleTapEvent");return false;}});// 步骤3-1:让某个View检测手势 - 重写View的onTouch函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应View.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {mGestureDetector.onTouchEvent(event);return true; // 注:返回true才能完整接收触摸事件}});// 步骤3-2:让某个Activity检测手势:重写Activity的dispatchTouchEvent函数,将触屏事件交给GestureDetector处理,从而对用户手势作出响应@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {mGestureDetector.onTouchEvent(ev); // 让GestureDetector响应触碰事件super.dispatchTouchEvent(ev); // 让Activity响应触碰事件return false;}

3. 实例说明

现在对一个TextView进行手势检测
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="600dp"android:text="carson_ho Test"android:textAppearance="?android:attr/textAppearanceLarge" /></LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {TextView mTextView;GestureDetector mGestureDetector;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 步骤1:创建手势检测器实例 & 传入OnGestureListener接口(需要复写对应方法)mGestureDetector = new GestureDetector(this, new GestureDetector.OnGestureListener() {// 1. 用户轻触触摸屏public boolean onDown(MotionEvent e) {Log.i("MyGesture1", "onDown");return false;}// 2. 用户轻触触摸屏,尚未松开或拖动// 与onDown()的区别:无松开 / 拖动// 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress就会执行public void onShowPress(MotionEvent e) {Log.i("MyGesture", "onShowPress");}// 3. 用户长按触摸屏public void onLongPress(MotionEvent e) {Log.i("MyGesture", "onLongPress");}// 4. 用户轻击屏幕后抬起public boolean onSingleTapUp(MotionEvent e) {Log.i("MyGesture", "onSingleTapUp");return true;}// 5. 用户按下触摸屏 & 拖动public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {Log.i("MyGesture", "onScroll:");return true;}// 6. 用户按下触摸屏、快速移动后松开// 参数:// e1:第1个ACTION_DOWN MotionEvent// e2:最后一个ACTION_MOVE MotionEvent// velocityX:X轴上的移动速度,像素/秒// velocityY:Y轴上的移动速度,像素/秒public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {Log.i("MyGesture", "onFling");return true;}});// 步骤2:创建 & 设置OnDoubleTapListener接口实现类mGestureDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {// 1. 单击事件// 关于OnDoubleTapListener.onSingleTapConfirmed()和 OnGestureListener.onSingleTapUp()的区别// onSingleTapConfirmed:再次点击(即双击),则不会执行// onSingleTapUp:手抬起就会执行public boolean onSingleTapConfirmed(MotionEvent e) {Log.i("MyGesture", "onSingleTapConfirmed");return false;}// 2. 双击事件public boolean onDoubleTap(MotionEvent e) {Log.i("MyGesture", "onDoubleTap");return false;}// 3. 双击间隔中发生的动作// 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件;public boolean onDoubleTapEvent(MotionEvent e) {Log.i("MyGesture", "onDoubleTapEvent");return false;}});// 步骤3:重写View的onTouch函数,将触屏事件交给GestureDetector处理,从而对用户手势作出响应mTextView = (TextView) findViewById(R.id.textView);mTextView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {mGestureDetector.onTouchEvent(event);return true;}});}
}

4. 测试效果

日志效果如下


使用类:SimpleOnGestureListener

1. 作用

集成了两个接口的手势检测功能

2. 与上述两个接口的区别

  • OnGestureListener和OnDoubleTapListener接口里的函数都是强制必须重写的
  • 而SimpleOnGestureListener类的函数则可根据需要选择性复写,因为SimpleOnGestureListener类本身已经实现了这两个接口的所有函数,只是里面全是空的而已

3. 使用步骤

// 步骤1:创建手势检测器实例// 构造函数有3个,此处用的是第三个// 1. GestureDetector gestureDetector=new GestureDetector(GestureDetector.OnGestureListener listener);// 2. GestureDetector gestureDetector=new GestureDetector(Context context,GestureDetector.OnGestureListener listener);// 3. GestureDetector gestureDetector=new GestureDetector(Context context,GestureDetector.SimpleOnGestureListener listener);GestureDetector mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {// OnGestureListener接口的函数// 1. 用户轻触触摸屏public boolean onDown(MotionEvent e) {Log.i("MyGesture1", "onDown");return false;}// 2. 用户轻触触摸屏,尚未松开或拖动// 与onDown()的区别:无松开 / 拖动// 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress就会执行public void onShowPress(MotionEvent e) {Log.i("MyGesture", "onShowPress");}// 3. 用户长按触摸屏public void onLongPress(MotionEvent e) {Log.i("MyGesture", "onLongPress");}// 4. 用户轻击屏幕后抬起public boolean onSingleTapUp(MotionEvent e) {Log.i("MyGesture", "onSingleTapUp");return true;}// 5. 用户按下触摸屏 & 拖动public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {Log.i("MyGesture", "onScroll:");return true;}// 6. 用户按下触摸屏、快速移动后松开// 参数:// e1:第1个ACTION_DOWN MotionEvent// e2:最后一个ACTION_MOVE MotionEvent// velocityX:X轴上的移动速度,像素/秒// velocityY:Y轴上的移动速度,像素/秒public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {Log.i("MyGesture", "onFling");return true;}// OnDoubleTapListener的函数// 1. 单击事件// 关于OnDoubleTapListener.onSingleTapConfirmed()和 OnGestureListener.onSingleTapUp()的区别// onSingleTapConfirmed:再次点击(即双击),则不会执行// onSingleTapUp:手抬起就会执行public boolean onSingleTapConfirmed(MotionEvent e) {Log.i("MyGesture", "onSingleTapConfirmed");return false;}// 2. 双击事件public boolean onDoubleTap(MotionEvent e) {Log.i("MyGesture", "onDoubleTap");return false;}// 3. 双击间隔中发生的动作// 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件;public boolean onDoubleTapEvent(MotionEvent e) {Log.i("MyGesture", "onDoubleTapEvent");return false;}});// 步骤2-1:让某个View检测手势 - 重写View的onTouch函数,将View的触屏事件交给GestureDetector处理,从而对用户手势作出响应View.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {mGestureDetector.onTouchEvent(event);return true; // 注:返回true才能完整接收触摸事件}});// 步骤2-2:让某个Activity检测手势:重写Activity的dispatchTouchEvent函数,将触屏事件交给GestureDetector处理,从而对用户手势作出响应@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {mGestureDetector.onTouchEvent(ev); // 让GestureDetector响应触碰事件super.dispatchTouchEvent(ev); // 让Activity响应触碰事件return false;}

4. 实例说明

现在对一个TextView进行手势检测
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="600dp"android:text="carson_ho Test"android:textAppearance="?android:attr/textAppearanceLarge" /></LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {TextView mTextView;GestureDetector mGestureDetector;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 步骤1:创建手势检测器实例 & 传入OnGestureListener接口(需要复写对应方法)mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {// OnGestureListener接口的函数// 1. 用户轻触触摸屏public boolean onDown(MotionEvent e) {Log.i("MyGesture1", "onDown");return false;}// 2. 用户轻触触摸屏,尚未松开或拖动// 与onDown()的区别:无松开 / 拖动// 即:当用户点击的时,onDown()就会执行,在按下的瞬间没有松开 / 拖动时onShowPress就会执行public void onShowPress(MotionEvent e) {Log.i("MyGesture", "onShowPress");}// 3. 用户长按触摸屏public void onLongPress(MotionEvent e) {Log.i("MyGesture", "onLongPress");}// 4. 用户轻击屏幕后抬起public boolean onSingleTapUp(MotionEvent e) {Log.i("MyGesture", "onSingleTapUp");return true;}// 5. 用户按下触摸屏 & 拖动public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {Log.i("MyGesture", "onScroll:");return true;}// 6. 用户按下触摸屏、快速移动后松开// 参数:// e1:第1个ACTION_DOWN MotionEvent// e2:最后一个ACTION_MOVE MotionEvent// velocityX:X轴上的移动速度,像素/秒// velocityY:Y轴上的移动速度,像素/秒public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {Log.i("MyGesture", "onFling");return true;}// OnDoubleTapListener的函数// 1. 单击事件// 关于OnDoubleTapListener.onSingleTapConfirmed()和 OnGestureListener.onSingleTapUp()的区别// onSingleTapConfirmed:再次点击(即双击),则不会执行// onSingleTapUp:手抬起就会执行public boolean onSingleTapConfirmed(MotionEvent e) {Log.i("MyGesture", "onSingleTapConfirmed");return false;}// 2. 双击事件public boolean onDoubleTap(MotionEvent e) {Log.i("MyGesture", "onDoubleTap");return false;}// 3. 双击间隔中发生的动作// 指触发onDoubleTap后,在双击之间发生的其它动作,包含down、up和move事件;public boolean onDoubleTapEvent(MotionEvent e) {Log.i("MyGesture", "onDoubleTapEvent");return false;}});// 步骤2:重写View的onTouch函数,将触屏事件交给GestureDetector处理,从而对用户手势作出响应mTextView = (TextView) findViewById(R.id.textView);mTextView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {mGestureDetector.onTouchEvent(event);return true;}});}
}

5. 测试效果

日志效果如下

至此,关于Android手势识别类GestureDetector类使用讲解完毕。


总结

  • 本文主要对Android手势识别类:GestureDetector类的使用进行全面讲解
  • Carson带你学Android系列文章
    Carson带你学Android:学习方法
    Carson带你学Android:四大组件
    Carson带你学Android:自定义View
    Carson带你学Android:异步-多线程
    Carson带你学Android:性能优化
    Carson带你学Android:动画

欢迎关注Carson_Ho的CSDN博客 与 公众号!

博客链接:https://carsonho.blog.csdn.net/


请帮顶 / 评论点赞!因为你的鼓励是我写作的最大动力!

这篇关于Carson带你学Android:手把手教你学会手势识别应用 GestureDetector的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/214287

相关文章

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat