Android”录音打点-播放时再添加新标记”功能 (Collecitons.sort)

1.简介:

上一小节讲到了ArrayList的持久化本地保存,但是有新的需求,就是我们在播放的时候再次点击标记,那么就会得到新的时间,那么这个时间和原来的时间是需要对比,并再次重新排序的。所以就用到了排序。

2.流程分析:

  • 1.每次点击标记按钮都得到新的值,放入ArrayList。
  • 2.录完后,如果点击删除,则清空ArrayList,保存则持久化SP保存ArrayList.(根据上一小节的“time1-x”)
  • 3.播放界面,首先获取到保存过的ArrayList,如果有的话就显示标记图标、且点击可展开。
  • 4.如果正在播放,那么点击标记按钮,就会把数据放入到ArrayList里,“重新排序(就是本章节讲的)+并立即刷新“数据。
  • 5.点击其他的item歌曲,就关闭当前的item,并又长久保存一次。

3.详细的流程在我的项目里,这里只是大致罗列了关联的基础。

基础回顾1:java中对ArrayList进行排序

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

class Student {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

class Test {
    public static void main(String[] args) {

        List<Student> studentList = new ArrayList<Student>();
        studentList.add(new Student("丁发", 21));
        studentList.add(new Student("赵四", 22));
        studentList.add(new Student("张三", 11));
        studentList.add(new Student("刘分", 19));
        //年龄排序
        Collections.sort(studentList, new SortByAge());
        //输出
        for (Student student : studentList) {
            System.out.println(student.getName() + " / " + student.getAge());
        }
        System.out.println("----------------选另一种方式-----------------");
        //名字排序
        Collections.sort(studentList, new SortByName());
        //输出
        for (Student student : studentList) {
            System.out.println(student.getName() + " / " + student.getAge());
        }
    }
}

class SortByAge implements Comparator {
    public int compare(Object o1, Object o2) {
        Student s1 = (Student) o1;
        Student s2 = (Student) o2;
        if (s1.getAge() > s2.getAge())  //前大于后,返回正,否则返回0或-,那么是默认的升序,反之可改变<或return
            return 1;
        return 0;
    }
}

class SortByName implements Comparator {
    public int compare(Object o1, Object o2) {
        Student s1 = (Student) o1;
        Student s2 = (Student) o2;
        return s1.getName().compareTo(s2.getName());//如果进一步,就是名字相同,对比行年龄
    }
}

Collections.sort()的Comparable和Comparetor的区别。

用Collections.sort方法对list排序有两种方法:
1.第一种:list中的”对象实现“Comparable接口。
/**
 * 根据order对User排序
*/
//对象直接实现了Comparable接口,并重写compareTo方法。
public class User implements Comparable<User>{
     private String name;
     private Integer age;
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public Integer getAge() {
         return age;
     }
     public void setAge(Integer age) {
         this.age= age;
     }
     //重写compareTo方法决定要对比的内容。
     public int compareTo(User arg0) {
     //this和刚加入的对比。
         return this.getAge().compareTo(arg0.getAge());
     }
 } 
public class Test{

     public static void main(String[] args) {
         User one = new User();
         one.setName("a");
         one.setAge(1);
         User two = new User();
         two.setName("b");
         two.setAge(2);
         List<User> list = new ArrayList<User>();
         //此处add 2再add 1
        list.add(two );
         list.add(one );
         Collections.sort(list);
         for(User u : list){
             System.out.println(u.getName());
         }
     }
 } 
 输出了a->b
2.第二种:”根据Collections.sort重载方法“来实现同前一个方法一样。
/**
 * 根据Age对User排序
*/
public class User { //此处无需实现Comparable接口,改成在测试类中填写
    private String name;
     private Integer Age;
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public Integer getAge() {
         return age;
     }
     public void setAge(Integer age) {
         this.age= age;
     }
 }

//主类中我们可以这样(HastSet——>List——>sort进行排序):
public class Test {
    public static void main(String[] args) {
        User u1 = new User();
        u1.setName("a");
        u1.setPrice(13);
        User u2 = new User();
        u2.setName("b");
        u2.setPrice(6);

        Set<User> Hset = new HashSet<User>();
        Hset.add(u2);
        Hset.add(u1);

        List<User> list = new ArrayList<User>();
        list.addAll(Hset);

    //sort方法里传入一个Comaprator对象。
        Collections.sort(list,new Comparator<User>(){
            public int compare(User arg0, User arg1) {
                return arg0.getAge().compareTo(arg1.getAge());
            }
        });
        for(User u : list){
            System.out.println(u.getName());
        }
    }
要使用Mapbox GL JS实现定位打点功能,你需要遵循以下步骤: 1. 创建一个具有定位权限的地图: ```javascript mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN'; var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [lng, lat], // 设置地图中心点经纬度 zoom: 12 // 设置地图缩放级别 }); // 获取地理位置信息并更地图中心点 navigator.geolocation.getCurrentPosition(function(position) { var lng = position.coords.longitude; var lat = position.coords.latitude; map.setCenter([lng, lat]); }); ``` 2. 添加定位点: ```javascript var el = document.createElement('div'); el.className = 'marker'; // 创建一个Marker对象并添加到地图中 new mapboxgl.Marker(el) .setLngLat([lng, lat]) .addTo(map); ``` 3. 样式化定位点: ```css .marker { background-image: url('https://docs.mapbox.com/help/demos/custom-markers-gl-js/mapbox-icon.png'); background-size: cover; width: 50px; height: 50px; border-radius: 50%; cursor: pointer; } ``` 4. 完整代码示例: ```html <!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <title>Mapbox GL JS - Add geolocate control</title> <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' /> <script src='https://api.mapbox.com/mapbox-gl-js/v2.3.1/mapbox-gl.js'></script> <link href='https://api.mapbox.com/mapbox-gl-js/v2.3.1/mapbox-gl.css' rel='stylesheet' /> <style> body { margin: 0; padding: 0; } #map { position: absolute; top: 0; bottom: 0; width: 100%; } .marker { background-image: url('https://docs.mapbox.com/help/demos/custom-markers-gl-js/mapbox-icon.png'); background-size: cover; width: 50px; height: 50px; border-radius: 50%; cursor: pointer; } </style> </head> <body> <div id='map'></div> <script> mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN'; var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', center: [0, 0], // 设置地图中心点经纬度 zoom: 12 // 设置地图缩放级别 }); // 获取地理位置信息并更地图中心点 navigator.geolocation.getCurrentPosition(function(position) { var lng = position.coords.longitude; var lat = position.coords.latitude; map.setCenter([lng, lat]); // 创建定位点 var el = document.createElement('div'); el.className = 'marker'; new mapboxgl.Marker(el) .setLngLat([lng, lat]) .addTo(map); }); </script> </body> </html> ``` 这个示例代码会在地图上显示一个定位点,该点的位置是根据用户的当前位置动态确定的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值