Rumah Java javaTutorial 安卓基础之悬浮按钮和状态栏通知

安卓基础之悬浮按钮和状态栏通知

Jul 13, 2017 pm 05:21 PM

1.打开网页  

Uri uri = Uri.parse("http://www.php.cn");  
Intent it = new Intent(Intent.ACTION_VIEW, uri);  
startActivity(it);
Salin selepas log masuk

2.获取网页内容

 public String posturl(String url){
     InputStream is = null;
     String result = "";
     try{
         HttpClient httpclient = new DefaultHttpClient();
         HttpPost httppost = new HttpPost(url);
         HttpResponse response = httpclient.execute(httppost);
         HttpEntity entity = response.getEntity();
         is = entity.getContent();
     }catch(Exception e){
         return "Fail to establish http connection!"+e.toString();
     }
     try{
         BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));
         StringBuilder sb = new StringBuilder();
         String line = null;
         while ((line = reader.readLine()) != null) {
             sb.append(line + "\n");
         }
         is.close();
         result=sb.toString();
     }catch(Exception e){
         return "Fail to convert net stream!";
     }
     return result;
 }
Salin selepas log masuk

3.添加超链接

textView1.setText(Html.fromHtml("<a href=&#39;http://www.php.cn&#39;>php中文网 </a>"));
textView1.setMovementMethod(LinkMovementMethod.getInstance());
Salin selepas log masuk

4。允许访问网络

<uses-permission android:name="android.permission.INTERNET" />
Salin selepas log masuk

5。简单的消息框

new AlertDialog.Builder(this)
   .setTitle("标题") 
   .setMessage("简单消息框")
    .setPositiveButton("确定", null) 
    .show();
Salin selepas log masuk

6。确定与取消对话框

new AlertDialog.Builder(this)  
    .setTitle("确认") 
    .setMessage("确定吗?") 
    .setPositiveButton("是", null) 
    .setNegativeButton("否", null) 
    .show();
Salin selepas log masuk

7。带输入框的对话框

new AlertDialog.Builder(this) 
    .setTitle("请输入") 
    .setIcon(android.R.drawable.ic_dialog_info) 
    .setView(new EditText(this)) 
    .setPositiveButton("确定", null) 
    .setNegativeButton("取消", null) 
    .show();
Salin selepas log masuk

8。带单选框的对话框

 new AlertDialog.Builder(this) 
    .setTitle("请选择") 
    .setIcon(android.R.drawable.ic_dialog_info)                 
    .setSingleChoiceItems(new String[] {"选项1","选项2","选项3","选项4"}, 0,  
      new DialogInterface.OnClickListener() { 
                                   
         public void onClick(DialogInterface dialog, int which) { 
            dialog.dismiss(); 
         } 
      } 
    ) 
    .setNegativeButton("取消", null) 
    .show();
Salin selepas log masuk


9。带多选框的对话框

new AlertDialog.Builder(this) 
  .setTitle("多选框") 
  .setMultiChoiceItems(new String[] {"选项1","选项2","选项3","选项4"}, null, null) 
  .setPositiveButton("确定", null)                 
  .setNegativeButton("取消", null) 
  .show();
Salin selepas log masuk

10。带列表框的对话框

new AlertDialog.Builder(this) 
     .setTitle("列表框") 
  .setItems(new String[] {"列表项1","列表项2","列表项3"}, null) 
  .setNegativeButton("确定", null) 
  .show();
Salin selepas log masuk

11。图片框

ImageView img = new ImageView(this); 
  img.setImageResource(R.drawable.ic_launcher); 
  new AlertDialog.Builder(this) 
  .setTitle("图片框") 
  .setView(img) 
  .setPositiveButton("确定", null) 
  .show();
Salin selepas log masuk


12。弹出短暂提示框

public void alert(String txt){
   Toast.makeText(MainActivity.this,txt, 1).show();
  }
Salin selepas log masuk


13。网址转码

 public String urlencode(String str) throws UnsupportedEncodingException{
   return java.net.URLEncoder.encode(str, "utf-8");  
  }
Salin selepas log masuk

14。网址解码

 public String urldecode(String str) throws UnsupportedEncodingException{
   return java.net.URLDecoder.decode(str, "utf-8");  
  }
Salin selepas log masuk


15。获取网页源码

//得到二进制数据   
    public String getDatas(String path) throws Exception{  
        // 类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。   
        URL url = new URL(path);  
         // 每个 HttpURLConnection 实例都可用于生成单个请求,   
         //但是其他实例可以透明地共享连接到 HTTP 服务器的基础网络   
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();  
         //设置 URL 请求的方法   
         conn.setRequestMethod("GET");  
         //设置一个指定的超时值(以毫秒为单位),   
        //该值将在打开到此 URLConnection 引用的资源的通信链接时使用。   
        conn.setConnectTimeout(5 * 1000);  
        // conn.getInputStream()返回从此打开的连接读取的输入流   
        InputStream inStream = conn.getInputStream();// 通过输入流获取html数据   
         byte[] data = readInputStream(inStream);// 得到html的二进制数据   
       String html = new String(data);  
        return html;  
           
     }  
    //读取输入流中的数据,返回字节数组byte[]   
     public byte[] readInputStream(InputStream inStream) throws Exception{  
        //此类实现了一个输出流,其中的数据被写入一个 byte 数组   
         ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
         // 字节数组   
         byte[] buffer = new byte[1024];  
        int len = 0;  
        //从输入流中读取一定数量的字节,并将其存储在缓冲区数组buffer 中   
         while ((len = inStream.read(buffer)) != -1) {  
            // 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此输出流  
             outStream.write(buffer, 0, len);  
         }  
         inStream.close();  
        //toByteArray()创建一个新分配的 byte 数组。   
         return outStream.toByteArray();  
     }
Salin selepas log masuk

16。显示网络图片

public Bitmap returnBitMap(String url) {   
         URL myFileUrl = null;   
         Bitmap bitmap = null;   
         try {   
          myFileUrl = new URL(url);   
         } catch (MalformedURLException e) {   
          e.printStackTrace();   
         }   
         try {   
          HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();   
          conn.setDoInput(true);   
          conn.connect();   
          InputStream is = conn.getInputStream();   
          bitmap = BitmapFactory.decodeStream(is);   
          is.close();   
         } catch (IOException e) {   
          e.printStackTrace();   
         }   
         return bitmap;   
      }  
 ImageView imView = (ImageView) findViewById(R.id.pic1);   
 imView.setImageBitmap(returnBitMap("https://img.php.cn/upload/course/000/001/120/595af5fa9f34f845.png"));
Salin selepas log masuk


17。按钮点击事件

//登录检测
   Button button=(Button)findViewById(R.id.button1);
         button.setOnClickListener(new OnClickListener(){   
    public void onClick(View v){
        }
    });
  //登录检测
Salin selepas log masuk

18。对话框监听事件

new AlertDialog.Builder(this) 
  .setTitle("亲,是否退出?") 
  .setPositiveButton("确定", new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface arg0, int arg1) {
    // TODO Auto-generated method stub
    alert("你点了确定");
   }}) 
        .setNegativeButton("取消",new DialogInterface.OnClickListener() {
   @Override
   public void onClick(DialogInterface dialog, int which) {
    // TODO Auto-generated method stub
    alert("你已经取消了");
   }})
  .show(); 
  public void alert(String txt){
   Toast.makeText(this,txt, 1).show();
  }
Salin selepas log masuk

19。安卓退出程序

private void showTips() {
 
    AlertDialog alertDialog = new AlertDialog.Builder(this)
           .setTitle("退出程序").setMessage("是否退出程序")
               .setPositiveButton("确定", new DialogInterface.OnClickListener() {
  
                   public void onClick(DialogInterface dialog, int which) {
                       finish();
                   }
  
               }).setNegativeButton("取消",
 
               new DialogInterface.OnClickListener() {
                      public void onClick(DialogInterface dialog, int which) {
                         return;
                     }
               }).create(); // 创建对话框
         alertDialog.show(); // 显示对话框
      }
   public boolean onKeyDown(int keyCode, KeyEvent event) {
  
       if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            showTips();
            return false;
         }
  
        return super.onKeyDown(keyCode, event);
     }
Salin selepas log masuk

20。安卓WebView组件

 WebView mWebView = new WebView(this);
  
  mWebView.setWebViewClient(new webViewClient());//调用自身打开
 
  mWebView.getSettings().setJavaScriptEnabled(true); 
  mWebView.loadUrl("http://www.php.cn/member/1.html"); 
 setContentView(mWebView);  
class webViewClient extends WebViewClient{ 
           //重写shouldOverrideUrlLoading方法,使点击链接后不使用其他的浏览器打开。 
        @Override 
        public boolean shouldOverrideUrlLoading(WebView view, String url) { 
            view.loadUrl(url); 
            //如果不需要其他对点击链接事件的处理返回true,否则返回false 
            return true; 
        } 
            
       }
Salin selepas log masuk


21。无参数Activity跳转

Intent it = new Intent(Activity.Main.this, Activity2.class);
startActivity(it);
Salin selepas log masuk

22。向下一个Activity传递数据(使用Bundle和Intent.putExtras)

Intent it = new Intent(Activity.Main.this, Activity2.class);
Bundle bundle=new Bundle();
bundle.putString("name", "This is from MainActivity!");
it.putExtras(bundle);       // it.putExtra(“test”, "shuju”);
startActivity(it);            // startActivityForResult(it,REQUEST_CODE);
Salin selepas log masuk

对于数据的获取可以采用:

Bundle bundle=getIntent().getExtras();
String name=bundle.getString("name");
Salin selepas log masuk

23。向上一个Activity返回结果(使用setResult,针对startActivityForResult(it,REQUEST_CODE)启动的Activity)

Intent intent=getIntent();
Bundle bundle2=new Bundle();
bundle2.putString("name", "This is from ShowMsg!");
intent.putExtras(bundle2);
setResult(RESULT_OK, intent);
Salin selepas log masuk

24。回调上一个Activity的结果处理函数(onActivityResult)

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode==REQUEST_CODE){
            if(resultCode==RESULT_CANCELED)
                  setTitle("cancle");
            else if (resultCode==RESULT_OK) {
                 String temp=null;
                 Bundle bundle=data.getExtras();
                 if(bundle!=null)   temp=bundle.getString("name");
                 setTitle(temp);
            }
        }
    }
Salin selepas log masuk

25。安卓定时器

 Timer timer = new Timer(); 
   timer.schedule(task,10000,2000);   
      
TimerTask task = new TimerTask(){   
           public void run() {  
            Message message = new Message();  
            message.what = 1;  
            handler.sendMessage(message);   
            }   
           };  
Handler handler = new Handler(){ 
          public void handleMessage(Message msg) {    
           switch (msg.what) {    
           case 1:     
            alert("hear me?");    
            break;    
            }   
           super.handleMessage(msg);   
           }   
          };
Salin selepas log masuk

26。安卓插入背景音乐

MediaPlayer mediaPlayer = new MediaPlayer();
          Uri uri = Uri
               .parse("http://www.php.cn/asset/1.mp3");  
  try {
   mediaPlayer.setDataSource(Sound.this, uri);
  } catch (IllegalArgumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SecurityException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IllegalStateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }  
 
try {
   mediaPlayer.prepare();
  } catch (IllegalStateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }  
 mediaPlayer.start();
Salin selepas log masuk

27。int与string互转


1 如何将字串 String 转换成整数 int?

A. 有两个方法:

1). int i = Integer.parseInt([String]); 或
i = Integer.parseInt([String],[int radix]);

2). int i = Integer.valueOf(my_str).intValue();

注: 字串转成 Double, Float, Long 的方法大同小异.

2 如何将整数 int 转换成字串 String ?

A. 有叁种方法:

1.) String s = String.valueOf(i);

2.) String s = Integer.toString(i);

3.) String s = "" + i;

注: Double, Float, Long 转成字串的方法大同小异.

28。获取屏幕宽高

DisplayMetrics dm = getResources().getDisplayMetrics(); 
int screenWidth = dm.widthPixels; 
int screenHeight = dm.heightPixels - 50;
Salin selepas log masuk

29。图片拖动

private int screenWidth; 
private int screenHeight; 
private ImageView img1; 
private ImageView img2;
img1 = (ImageView) findViewById(R.id.imageView1); 
img2 = (ImageView) findViewById(R.id.imageView2);
DisplayMetrics dm = getResources().getDisplayMetrics(); 
screenWidth = dm.widthPixels; 
screenHeight = dm.heightPixels - 50;
img1.setOnTouchListener(movingEventListener); 
img2.setOnTouchListener(movingEventListener);
private OnTouchListener movingEventListener = new OnTouchListener() { 
int lastX, lastY; 
@Override 
public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
        lastX = (int) event.getRawX(); 
        lastY = (int) event.getRawY(); 
        break; 
    case MotionEvent.ACTION_MOVE: 
        int dx = (int) event.getRawX() - lastX; 
        int dy = (int) event.getRawY() - lastY;
        int left = v.getLeft() + dx; 
        int top = v.getTop() + dy; 
        int right = v.getRight() + dx; 
        int bottom = v.getBottom() + dy; 
        // 设置不能出界 
        if (left < 0) { 
            left = 0; 
            right = left + v.getWidth(); 
        }
        if (right > screenWidth) { 
            right = screenWidth; 
            left = right - v.getWidth(); 
        }
        if (top < 0) { 
            top = 0; 
            bottom = top + v.getHeight(); 
        }
        if (bottom > screenHeight) { 
            bottom = screenHeight; 
            top = bottom - v.getHeight(); 
        }
        v.layout(left, top, right, bottom);
        lastX = (int) event.getRawX(); 
        lastY = (int) event.getRawY();
        break; 
    case MotionEvent.ACTION_UP: 
        break; 
    } 
    return true; 
} 
};
Salin selepas log masuk


30。状态栏通知消息提示代码

 private void addNotificaction(int id) {
   NotificationManager manager = (NotificationManager) this
   .getSystemService(Context.NOTIFICATION_SERVICE);
   // 创建一个Notification
   Notification notification = new Notification();
   // 设置显示在手机最上边的状态栏的图标
   notification.icon = R.drawable.ic_launcher;
   // 当当前的notification被放到状态栏上的时候,提示内容
   notification.tickerText = "注意了,我被扔到状态栏了";
   
 
   // 添加声音提示
   notification.defaults=Notification.DEFAULT_SOUND;
   // audioStreamType的值必须AudioManager中的值,代表着响铃的模式
   notification.audioStreamType= android.media.AudioManager.ADJUST_LOWER;
   
   //下边的两个方式可以添加音乐
   //notification.sound = Uri.parse("http://www.php.cn/asset/1.mp3"); 
   //notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6"); 
   Intent intent = new Intent(this, functions.class);
   PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
   // 点击状态栏的图标出现的提示信息设置
   notification.setLatestEventInfo(this, "内容提示:", "我就是一个测试文件", pendingIntent);
   manager.notify(id, notification);
   
  }
Salin selepas log masuk

31。安卓弹出层【弹窗】代码

private void showPopUp(View v) {
   LinearLayout layout = new LinearLayout(this);
   layout.setBackgroundColor(Color.GRAY);
   TextView tv = new TextView(this);
   tv.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
   tv.setText("I&#39;m a pop -----------------------------!");
   tv.setTextColor(Color.WHITE);
   layout.addView(tv);
   PopupWindow popupWindow = new PopupWindow(layout,120,120);
   
   popupWindow.setFocusable(true);
   popupWindow.setOutsideTouchable(true);
   popupWindow.setBackgroundDrawable(new BitmapDrawable());
   
   int[] location = new int[2];
   v.getLocationOnScreen(location);
   
   popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1]-popupWindow.getHeight());
  }  
  showPopUp(LayoutInflater.from(getBaseContext()).inflate(R.layout.popview, null));
Salin selepas log masuk

32。 安卓通过新的xml布局文件获取view对象

LayoutInflater.from(getBaseContext()).inflate(R.layout.popview, null);
Salin selepas log masuk

33。悬浮功能所需要的权限

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Salin selepas log masuk

34。添加悬浮按钮

 权限  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 
 
WindowManager wm=(WindowManager)getApplicationContext().getSystemService("window");  
WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();  
wmParams.type=2002;  //type是关键,这里的2002表示系统级窗口,你也可以试试2003。  
wmParams.format=1;  
wmParams.flags=40;  
wmParams.width=40;  
wmParams.height=40;  
wm.addView(LayoutInflater.from(getBaseContext()).inflate(R.layout.popview, null), wmParams);//创建View
Salin selepas log masuk

本文由php中文网用户“Ty80”提供,原文地址:http://www.php.cn/java-article-374028.html

请勿转载~~~

学习php就上php中文网.

Atas ialah kandungan terperinci 安卓基础之悬浮按钮和状态栏通知. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Artikel ini menganalisis empat kerangka JavaScript teratas (React, Angular, Vue, Svelte) pada tahun 2025, membandingkan prestasi, skalabilitas, dan prospek masa depan mereka. Walaupun semuanya kekal dominan kerana komuniti dan ekosistem yang kuat, popul mereka yang relatif

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

Artikel ini membincangkan pelaksanaan caching pelbagai peringkat di Java menggunakan kafein dan cache jambu untuk meningkatkan prestasi aplikasi. Ia meliputi persediaan, integrasi, dan faedah prestasi, bersama -sama dengan Pengurusan Dasar Konfigurasi dan Pengusiran PRA Terbaik

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Mar 07, 2025 pm 05:52 PM

Artikel ini menangani kelemahan CVE-2022-1471 dalam Snakeyaml, kecacatan kritikal yang membolehkan pelaksanaan kod jauh. Ia memperincikan bagaimana peningkatan aplikasi boot musim bunga ke snakeyaml 1.33 atau lebih lama mengurangkan risiko ini, menekankan bahawa kemas kini ketergantungan

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

Kelas kelas Java melibatkan pemuatan, menghubungkan, dan memulakan kelas menggunakan sistem hierarki dengan bootstrap, lanjutan, dan pemuat kelas aplikasi. Model delegasi induk memastikan kelas teras dimuatkan dahulu, yang mempengaruhi LOA kelas tersuai

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Mar 07, 2025 pm 06:12 PM

Node.js 20 dengan ketara meningkatkan prestasi melalui penambahbaikan enjin V8, terutamanya pengumpulan sampah yang lebih cepat dan I/O. Ciri -ciri baru termasuk sokongan webassembly yang lebih baik dan alat penyahpepijatan halus, meningkatkan produktiviti pemaju dan kelajuan aplikasi.

Iceberg: Masa Depan Jadual Data Tasik Iceberg: Masa Depan Jadual Data Tasik Mar 07, 2025 pm 06:31 PM

Iceberg, format meja terbuka untuk dataset analitik yang besar, meningkatkan prestasi data dan skalabiliti. Ia menangani batasan parket/orc melalui pengurusan metadata dalaman, membolehkan evolusi skema yang cekap, perjalanan masa, serentak w

Cara berkongsi data antara langkah -langkah dalam timun Cara berkongsi data antara langkah -langkah dalam timun Mar 07, 2025 pm 05:55 PM

Artikel ini meneroka kaedah untuk berkongsi data antara langkah -langkah timun, membandingkan konteks senario, pembolehubah global, lulus argumen, dan struktur data. Ia menekankan amalan terbaik untuk mengekalkan, termasuk penggunaan konteks ringkas, deskriptif

Bagaimanakah saya dapat melaksanakan teknik pengaturcaraan berfungsi di Java? Bagaimanakah saya dapat melaksanakan teknik pengaturcaraan berfungsi di Java? Mar 11, 2025 pm 05:51 PM

Artikel ini meneroka mengintegrasikan pengaturcaraan berfungsi ke dalam Java menggunakan ekspresi Lambda, API Streams, rujukan kaedah, dan pilihan. Ia menyoroti faedah seperti kebolehbacaan dan kebolehkerjaan kod yang lebih baik melalui kesimpulan dan kebolehubahan

See all articles