1. 程式人生 > 其它 >leetcode 724.尋找陣列的中心索引

leetcode 724.尋找陣列的中心索引

技術標籤:工具安裝使用lambdajava

stream方法API

list轉map
  • list泛型物件的任意一屬性進行分組,構成Map<屬性,Object>
    Map<String,List<User>> map= userList.stream().collect(Collectors.groupingBy(User::getName));
    
  • list泛型物件的任意兩個屬性構成Map<屬性1, 屬性2>
    public Map<Long, String> getIdNameMap(List<Account> accounts)
    { return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername)); }
  • list泛型物件的任意一屬性為key,泛型物件為value構成Map<屬性,Object>
    // 方式一:account -> account是一個返回自己本身的lambda表示式
    public Map<Long, Account> getIdAccountMap(List<Account> accounts) {
        return accounts.
    stream().collect(Collectors.toMap(Account::getId,account -> account)); // 方式二:其實還可以使用Function介面中的一個預設方法代替,使整個方法更簡潔優雅 public Map<Long, Account> getIdAccountMap(List<Account> accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId, Function.identity())); } // 方式是三:name重複的,方式二就會丟擲異常(java.lang.IllegalStateException: Duplicate key),可使用過載方法傳入一個合併相同key的函式來解決key衝突問題:
    public Map<String, Account> getNameAccountMap(List<Account> accounts) { return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2)); }
  • 指定返回Map的具體實現資料結構
    // 指定一個Map的具體實現,如:LinkedHashMap
    public Map<String, Account> getNameAccountMap(List<Account> accounts) {
        return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2, LinkedHashMap::new));
    }
    
list轉list
  • list泛型物件轉為另一個物件的list
    List<SettlementInfoPO> settlementInfoPOS = timeoutData.stream().map(item -> {
        SettlementInfoPO settlementInfoPO = item.convertPo();
        return settlementInfoPO;
    }).collect(Collectors.toList());
    
  • list泛型物件的某個屬性構成另一個list
    roomList.stream().map(Room::getAvgPrice).collect(Collectors.toList());
    
  • list泛型物件的某屬性排序後構成另一個list
    // 升序
    roomList.stream().sorted(Comparator.comparing(Room::getAvgPrice)).collect(Collectors.toList());
    
    // 降序
    roomList.stream().sorted(Comparator.comparing(Room::getAvgPrice).reversed()).collect(Collectors.toList());
    
    list.sort((a, b) -> a.name.compareTo(b.name));
    
  • 去重,需要重寫物件的equals和hashcode方法

    roomList.stream().distinct().collect(Collectors.toList());
    
  • list泛型物件的某些屬性過濾後構成另一個list
    // 且
    roomList.stream().filter(benefit -> benefit.getId() == 1 && benefit.getAge() == 20).collect(Collectors.toList());
    
    // 或
    roomList.stream().filter(benefit -> benefit.getId() == 1 || benefit.getId() == 20).collect(Collectors.toList());
    
  • 返回list第一個元素
    // 返回第一個元素,沒有返回null
    roomList.stream().findFirst().orElse(null);
    
list轉String
  • 將list中的元素拼接成一個字串,中間用T隔開
    roomList.stream().collect(Collectors.joining("T"));