導航:首頁 > 操作系統 > androidlambda

androidlambda

發布時間:2022-12-17 00:40:50

1. lambda表達式在android中的妙用

@[toc]

::輸出的時候使用
-> 傳遞值的時候使用

對應lambda

x -> body

對應lambda

(x, y) -> x + y;

對應lambda

(int x, int y) -> x + y;

() -> {}

(x, y) -> x + y;
3)單行需要有返回值
(x, y) -> x + y//注意沒有分號結尾

(x, y) ->{
x x;
y y;
}

(x, y) ->{
x x;
y y;
return x + y;
}

(1)list在forEach中使用lambda

(2)map在forEach中使用lambda

2. android如何使用lambda表達式

java8之前,Java並不支持Lambda表達式,而Android目前最新也才支持到Java7特性,所以在Android中使用Lambda表達式需要進行一些處理,將Lambda表達式編譯成Android可以「理解」的方式。
Retrolambda是一個能夠讓我們在Java7中使用Lambda的工具,再通過gradle-retrolambda插件,在gradle編譯過程中將會:
將Java8中的 javac編譯 Java8的代碼;
將產生的Java8的位元組碼轉換為Java6的位元組碼;
重新打包class。
build.gradle配置文件如下:
buildscript {
repositories {
mavenCentral()
maven {
url "https://oss.sonatype.org/content/repositories/snapshots"
}
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:1.2.+'
}
}
// Required because retrolambda is on maven central
repositories {
mavenCentral()
}
apply plugin: 'android'
apply plugin: 'retrolambda'
也可以添加如下設置:
retrolambda {
jdk System.getenv("JAVA8_HOME")
javaVersion JavaVersion.VERSION_1_6
}
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
從此以後,
strings.map(new Func1<String, Integer>() {
@Override
public Integer call(String s) {
return s.length();
}
});
可以寫作:
strings.map((String s) -> {
return s.length();
});
至於詳細的bytecode轉換過程,有興趣的同志們可以自己研究研究。

3. 如何Android Studio里使用lambda表達式

Lambda表達式是在JDK8中開始支持的一種函數式推導語言,能夠大量減少匿名內部類那種冗餘的代碼。在Android中,可以大量使用在設置監聽,設置非同步回調等場景。
目前Android開發已經漸漸到從Eclipse的ADT遷移到了AndroidStudio,但是AndroidStudio目前的版本還沒有直接支持Lambda表達式的支持,需要插件支持,當然,JDK版本也必須使用JDK8或者以上(當然過些時間會有更高版本的JDK)。
1.引入retrolambda插件:
在Project的build.gradle中添加
applyplugin:『me.tatarka.retrolambda『

2.設置編譯選項(可能也可以不寫)
在Project的build.gradle的android節點中添加如下代碼
compileOptions{
.VERSION_1_8
.VERSION_1_8
}

3.引入retrolambda的類路徑,在Mole:app的build.gradle中的buildscript->dependencies節點中添加如下代碼
classpath『me.tatarka:gradle-retrolambda:3.2.0『

4.對build.gradle進行build
5.編寫測試代碼,簡單寫法如下
[java]viewplain
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.text);
textView.setOnClickListener(v->Toast.makeText(getApplicationContext(),"Lambda",Toast.LENGTH_LONG).show());
}
6.運行查看是否正常

詳細一點為:

AndroidStudio默認使用Lambda表達式是會報錯的,即使你使用的是Java8,為了在androidstudio中使用lambda表達式,我們必須藉助一個插件retrolambda,該插件將Java8中的lambda表達式特性兼容到java5。使用它也很簡單。
首先先項目根目錄下的build.gradle中加入
[java]viewplain
<codeclass="hljs">classpath'me.tatarka:gradle-retrolambda:3.2.0'</code>
最終整個文件會像這樣子
[java]viewplain
<codeclass="hljs">buildscript{
repositories{
jcenter()
}
dependencies{
classpath'com.android.tools.build:gradle:1.2.3'
classpath'me.tatarka:gradle-retrolambda:3.2.0'
}
}

allprojects{
repositories{
jcenter()
}
}
</code>
然後再mole目錄下的build.gradle中使用插件,加入
[java]viewplain
<codeclass="hljs">applyplugin:'me.tatarka.retrolambda'</code>
並且在android節點下加入
[java]viewplain
<codeclass="hljs">compileOptions{
sourceCompatibility<atarget="_blank"href="
(51,51,51);text-decoration:none;font-size:14px;background:none">Java</a>Version.VERSION_1_8
.VERSION_1_8
}</code>
最終整個文件就像這樣子
[java]viewplain
<codeclass="hljs">applyplugin:'com.android.application'
applyplugin:'me.tatarka.retrolambda'
android{
compileSdkVersion22
buildToolsVersion22.0.1

defaultConfig{
applicationIdcn.e.zafu.rxdemo
minSdkVersion15
targetSdkVersion22
versionCode1
versionName1.0
}
buildTypes{
release{
minifyEnabledfalse
('proguard-android.txt'),'proguard-rules.pro'
}
}
compileOptions{
.VERSION_1_8
.VERSION_1_8
}
}

dependencies{
compilefileTree(dir:'libs',include:['*.jar'])
compile'com.android.support:appcompat-v7:22.2.0'

}
</code>
現在讓我們試試lambda表達式,就拿View的點擊事件做實驗吧。
在使用lambda表達式之前是這樣子的
[java]viewplain
<codeclass="hljs">btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
Toast.makeText(getApplicationContext(),test,Toast.LENGTH_LONG).show()
}
});</code>
使用了lambda表達式之後是這樣子的
[java]viewplain
<codeclass="hljs">btn=(Button)findViewById(R.id.btn);
btn.setOnClickListener(v->Toast.makeText(getApplicationContext(),test,Toast.LENGTH_LONG).show()
);</code>
好了,運行一下項目,如果點擊按鈕出現了Toast說明你成功了,但是如果你運行出現ClassNotFound的錯誤的話clean一下項目,再編譯運行,就能成功運行了。
怎麼樣,有沒有發現代碼精簡了許多。這篇文章算是開始RxJava(RxAndroid)的學習之路的第一篇博文吧,畢竟RxJava大量使用了lambda表達式特性。雖然也可以不用lambda表達式,但是使用了lambda表達式後會顯得代碼特別精簡。

來自zzh1026it的博客分享

4. 如何Android Studio里使用lambda表達式

Android Studio默認使用Lambda表達式是會報錯的,即使你使用的是Java 8,為了在android studio中使用lambda表達式,我們必須藉助一個插件retrolambda ,該插件將Java 8中的lambda表達式特性兼容到java 5。使用它也很簡單。

首先先項目根目錄下的build.gradle中加入

classpath 'me.tatarka:gradle-retrolambda:3.2.0'11

最終整個文件會像這樣子

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
classpath 'me.tatarka:gradle-retrolambda:3.2.0'
}
}

allprojects {
repositories {
jcenter()
}
}

然後再mole目錄下的build.gradle中使用插件,加入

apply plugin: 'me.tatarka.retrolambda'11

並且在android節點下加入

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}12341234

最終整個文件就像這樣子

apply plugin: 'com.android.application'
apply plugin: 'me.tatarka.retrolambda'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"

defaultConfig {
applicationId "cn.e.zafu.rxdemo"
minSdkVersion 15
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'

}

現在讓我們試試lambda表達式,就拿View的點擊事件做實驗吧。

在使用lambda表達式之前是這樣子的

btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show()
}
});12345671234567

使用了lambda表達式之後是這樣子的

btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(v -> Toast.makeText(getApplicationContext(), "test", Toast.LENGTH_LONG).show()
);123123

好了,運行一下項目,如果點擊按鈕出現了Toast說明你成功了,但是如果你運行出現ClassNotFound的錯誤的話clean一下項目,再編譯運行,就能成功運行了。

例子、源碼、文檔全部搞定,採用androidstudo的目錄結構,360手機助手中下載。下面是截圖。

5. Android studio中怎麼操作lambda

首先明確lambda表達式他是一個匿名函數,通常可以表示閉包。在Android studio中操作lambda表達式主要有以下幾步:

  1. 在Gradle(Project)中添加:(classpath:classpath 'me.tatarka:gradle-retrolambda:3.2.0')如圖所示:

6. 如何Android Studio里使用lambda表達式

Lambda表達式是Java 8的一個新特性,可以替代只有一個函數的介面實現,告別匿名內部類,代碼看起來更簡潔易懂。Lambda表達式同時還提升了對集合的迭代、遍歷、過濾數據的操作。那麼在Android Studio中如何使用lambda表達式呢?

項目使用的jdk要為jdk 8或更高版本

然後在項目中就可以愉快使用lambda表達式了,大家感受下:

public class TestActivity extends BaseActivity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(R.layout.test);

findViewById(R.id.button1).setOnClickListener(view -> onButton1());
findViewById(R.id.button2).setOnClickListener(view -> onButton2());

} public void onButton1() {
Runnable runnable = () -> Toast.makeText(this, "abcd", Toast.LENGTH_SHORT).show();
runnable.run();

} public void onButton2() {

Observable.from(Arrays.asList(1, 2, 3, 4, 5))
.filter(integer -> integer % 2 == 0)
.map(integer -> integer * integer)
.subscribeOn(Schelers.io())
.observeOn(AndroidSchelers.mainThread())
.subscribe(integer -> Toast.makeText(this, String.valueOf(integer), Toast.LENGTH_SHORT).show());
}


}

閱讀全文

與androidlambda相關的資料

熱點內容
51單片機程序單步視頻 瀏覽:239
家庭寬頻如何連接伺服器 瀏覽:117
汽車高壓泵解壓 瀏覽:770
上門正骨用什麼app 瀏覽:758
安卓為什麼免費使用 瀏覽:397
加密貨幣都有哪些平台 瀏覽:625
python和matlab難度 瀏覽:388
python爬蟲很難學么 瀏覽:572
小米解壓積木可以組成什麼呢 瀏覽:816
為什麼滴滴出行app還能用 瀏覽:564
怎麼升級手機android 瀏覽:923
php權威編程pdf 瀏覽:994
扣扣加密技巧 瀏覽:720
蘋果如何創建伺服器錯誤 瀏覽:497
軟考初級程序員大題分值 瀏覽:475
js壓縮視頻文件 瀏覽:580
linux如何通過命令創建文件 瀏覽:991
應用加密app還能訪問應用嘛 瀏覽:435
安卓怎麼用支付寶交違章罰款 瀏覽:667
php面向對象的程序設計 瀏覽:506