addtobackstack 无效 frist 是哪个集合的方法

.NET的System.Linq.Enumerable类为我们提供了许多Linq方法,今天给大家分享一下关于First,FirstOrDefault,Single,SingleOrDefault几个方法的区别,实例及使用场景,首先是关于这几个方法的定义:
First:返回序列中的第一个元素。
FirstOrDefault:返回序列中的第一个元素;如果序列中不包含任何元素,则返回默认值。
Single:返回序列的唯一元素;如果该序列并非恰好包含一个元素,则会引发异常。
SingleOrDefault:返回序列中的唯一元素;如果该序列为空,则返回默认值;如果该序列包含多个元素,此方法将引发异常。
定义很简单,相信大家看起来没有什么难度,下面通过C#实例来演示具体的用法:
using System.Collections.G
using System.L
using System.T
using System.Threading.T
namespace SingleOrDefaultDemo
class Program
static void Main(string[] args)
var lst = new List&int& { 10, 20, 100, 30, 60, 50, 80 };
//输出结果:10
Console.WriteLine("First:{0}", lst.First());
//输出结果:10
Console.WriteLine("FirstOrDefault:{0}", lst.FirstOrDefault());
//输出结果:100(注:因为这里的First是按List&int&的索引来取第一个符合条件的元素,所以结果是100,而不是按从小到大的顺序)
Console.WriteLine("First:{0}", lst.First(x =& x & 30));
//输出结果:100(同上First)
Console.WriteLine("FirstOrDefault:{0}", lst.FirstOrDefault(x =& x & 30));
// 抛出异常:序列包含一个以上的元素
//Console.WriteLine("Single:{0}", lst.Single());
// 抛出异常:序列包含一个以上的元素
//Console.WriteLine("SingleOrDefault:{0}", lst.SingleOrDefault());
//抛出异常:序列不包含任何匹配元素
//Console.WriteLine("Single:{0}", lst.Single(x =& x & 100));
//输出结果:0
Console.WriteLine("SingleOrDefault:{0}", lst.SingleOrDefault(x =& x & 100));
Console.WriteLine("Press any key to quit...");
Console.ReadKey();
运行时的异常截图:
运行结果图:
那么我们什么时候用First,FristOrDefault,Single,SingleOrDefault呢?
1.当集合中包含多个元素并想抛出异常时,可以使用Single或SingleOrDefault
2.当集合中不包含任何元素但需要返回默认值时,可以使用SingleOrDefault
3.无论集合中是否有元素,我们都想要返回一个记录时,可以使用First或FirstOrDefault
4.当集合中不包含任何元素但需要返回默认值时,可以使用FirstOrDefault
助记:有OrDefault的方法会返回值(如果没有符合条件的元素,则返回默认值),没有OrDefault的方法会抛出异常
FirstOrDefault与SingleOrDefault的性能比较:
FirstOrDefault通常在性能上会比SingleOrDefault表现得比优,因为FirstOrDefault是从集合开始位置查找到第一个匹配的元素就返回,而SingleOrDefault会迭代集合中所有的元素。
Linq还有很多需要探索的知识点,有时间会在这里和大家分享更多相关的技术理论,如果你对本文及网站有任何意见,建议或者看法,欢迎与我联系。
转载请注明: >>
Stay signed in
Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.使用throttleFirst解决按钮多次响应的问题 - 推酷
使用throttleFirst解决按钮多次响应的问题
本文是Real World RxJava系列的第一篇,这个系列主要介绍如何使用RxJava解决Android开发中的一些实际问题。如果你还不了解RxJava的基本概念(Observable, Subscriber, Subscription等),建议先阅读RxJava初探。
1. 问题描述
我们首先实现一个Android中最常见的点击按钮,弹出一个新的Fragment的效果,其代码如下。
findViewById(R.id.normal_button).setOnClickListener(view -& {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction
.setCustomAnimations(R.animator.slide_up, R.animator.slide_down, R.animator.slide_up, R.animator.slide_down)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction
.add(android.R.id.content, new DummyFragment())
.addToBackStack(DummyFragment.class.getSimpleName()).commit();});
这段代码存在的问题在于当用户无意中多次点击到按钮时,会弹出多个Fragment,如图所示。
2. 解决方案
我们通过使用
操作符来解决按钮被多次点击的问题。throttleFirst允许设置一个时间长度,之后它会发送固定时间长度内的第一个事件,而屏蔽其它事件,在间隔达到设置的时间后,可以再发送下一个事件,如下图所示。
同时,我们使用
将点击事件转化为一个Observable,将上述间隔时间设置为动画时间,这样,在点击按钮后只会弹出一个Fragment,避免了多次响应的问题。完整代码如下:
Button throttleFirstButton = (Button) findViewById(R.id.throttle_first_button);RxView.clicks(throttleFirstButton)
.throttleFirst(ANIMATION_TIME, TimeUnit.MILLISECONDS)
.subscribe(aVoid -& {
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction
.setCustomAnimations(R.animator.slide_up, R.animator.slide_down, R.animator.slide_up, R.animator.slide_down)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction
.add(android.R.id.content, new DummyFragment())
.addToBackStack(DummyFragment.class.getSimpleName()).commit();
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致C#集合基础与运用_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C#集合基础与运用
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩11页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢更多公众号:FristWU1健康生活,快乐分享。最新文章相关推荐对这篇文章不满意?您可以继续搜索:百度:搜狗:感谢您阅读在Win上完美安装Adobe系列软件教程及常见集合的解决办法,本文可能来自网络,如果侵犯了您的相关权益,请联系管理员。QQ:7038人阅读
jsp web(4)
在jsp页面上经常遇到得到集合长度、字符长度、字符切取等应用需,在2.0以前这种需是许多程序员对JSTL及为不满意的地方之一。为此在2.0&中添加了functions标签,其提供对以上需求的支持。&&&&&
使用方法&&&&&引用&%@&taglib&uri=&/jsp/jstl/functions&&prefix=&fn&%&函数说明:&&&
fn:contains(string,&substring)
如果参数string中包含参数substring,返回true
fn:containsIgnoreCase(string,&substring)
如果参数string中包含参数substring(忽略大小写),返回true
fn:endsWith(string,&suffix)
如果参数&string&以参数suffix结尾,返回true
fn:escapeXml(string)
将有特殊意义的XML&(和HTML)转换为对应的XML&character&entity&code,并返回
fn:indexOf(string,&substring)
返回参数substring在参数string中第一次出现的位置
fn:join(array,&separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。
fn:length(item)
返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。
fn:replace(string,&before,&after)
返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果
fn:split(string,&separator)
返回一个数组,以参数separator&为分割符分割参数string,分割后的每一部分就是数组的一个元素
fn:startsWith(string,&prefix)
如果参数string以参数prefix开头,返回true
fn:substring(string,&begin,&end)
返回参数string部分字符串,&从参数begin开始到参数end位置,包括end位置的字符
fn:substringAfter(string,&substring)
返回参数substring在参数string中后面的那一部分字符串
fn:substringBefore(string,&substring)
返回参数substring在参数string中前面的那一部分字符串
fn:toLowerCase(string)
将参数string所有的字符变为小写,并将其返回
fn:toUpperCase(string)
将参数string所有的字符变为大写,并将其返回
fn:trim(string)
去除参数string&首尾的空格,并将其返回
${fn:substring(&sdfsdf-sdfsgfg&,0,fn:indexOf(&sdfsdf-sdfsgfg&,&-&))}
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:245003次
积分:2470
积分:2470
排名:第11215名
原创:22篇
转载:35篇
评论:21条
(2)(1)(5)(4)(2)(7)(2)(3)(13)(6)(4)(2)(3)(2)(1)

我要回帖

更多关于 addtobackstack参数 的文章

 

随机推荐