第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

獲取列表中特定字符串的最后一次出現(xiàn)

獲取列表中特定字符串的最后一次出現(xiàn)

人到中年有點甜 2022-06-15 10:36:25
我有一個簡單的字符串列表。我的目標是按組獲取列表中每個字符串的最后一次出現(xiàn)。這是模式代碼: List<String> newData =  new ArrayList<>();    newData.add("A-something");    newData.add("A-fdfdsfds");    newData.add("A-fdsfdsfgs");    newData.add("B-something");    newData.add("B-dsafdrsafd");    newData.add("B-dsdfsad");我希望只得到每組的最后一次出現(xiàn)。換句話說,我只想得到“A-fdsfdsfgs”和“B-dsdfsad”。怎么做?
查看完整描述

3 回答

?
呼啦一陣風

TA貢獻1802條經(jīng)驗 獲得超6個贊

要獲取每個組的最后一次出現(xiàn),您可以使用帶有 groupingBy 的流 api:


import static java.util.stream.Collectors.*;


Map<String, Optional<String>> collect = newData.stream()

            .collect(groupingBy(strings -> strings.split("-")[0], 

                    mapping(s -> s, maxBy(Comparator.comparingInt(newData::lastIndexOf)))));

注意:地圖有Optional一個值


要獲得它而不Optional使用toMap而不是groupingBy:


Map<String, String> collect = newData.stream()

            .collect(toMap(s -> s.split("-")[0], 

                    Function.identity(), 

                    (s1, s2) -> newData.lastIndexOf(s1) > newData.lastIndexOf(s2) ? s1 : s2));

此外,如果您想擁有沒有組名的地圖值,請更改Function.identity()為s -> s.split("-")[1]


查看完整回答
反對 回復 2022-06-15
?
米琪卡哇伊

TA貢獻1998條經(jīng)驗 獲得超6個贊

正如其他答案已經(jīng)表明的那樣,有幾種方法可以做到這一點。我會發(fā)現(xiàn)類似以下自然的東西:


    Collection<String> lastOfEach = newData.stream()

            .collect(Collectors.groupingBy((String s) -> s.split("-")[0],

                    Collectors.reducing("", s -> s, (l, r) -> r)))

            .values();


    lastOfEach.forEach(System.out::println);

使用您的列表,輸出為:


A-fdsfdsfgs

B-dsdfsad

我的分組與其他幾個答案相同。在分組值上,我執(zhí)行縮減,每次我得到兩個字符串時都取后者。最后,這將根據(jù)要求為我們提供每個組的最后一個字符串。由于groupingBy生成了地圖,我使用values丟棄鍵 (A和B) 并僅獲取原始字符串。


查看完整回答
反對 回復 2022-06-15
?
慕田峪9158850

TA貢獻1794條經(jīng)驗 獲得超8個贊

import java.util.*;

class Solution {

    public static void main(String[] args) {

        List<String> newData =  new ArrayList<>();

        newData.add("A-something");

        newData.add("A-fdfdsfds");

        newData.add("A-fdsfdsfgs");

        newData.add("B-something");

        newData.add("B-dsafdrsafd");

        newData.add("B-dsdfsad");

        System.out.println(lastOccurrences(newData).toString());

    }


    private static List<String> lastOccurrences(List<String> data){

        Set<String> set = new HashSet<>();

        List<String> ans = new ArrayList<>();

        for(int i=data.size()-1;i>=0;--i){

            String group = data.get(i).substring(0,data.get(i).indexOf("-"));

            if(set.contains(group)) continue;

            set.add(group);

            ans.add(data.get(i));

        }


        return ans;

    }

}

輸出:


[B-dsdfsad, A-fdsfdsfgs]

算法:

  • 從最后一個移到第一個,而不是從第一個到最后,因為你想要last occurrences。這將使管理更容易,代碼更簡潔。

  • 使用substring()方法獲取字符串所屬的組。

  • 使用一來跟蹤已經(jīng)訪問過的組。

  • 如果一個組不在集合中,則將其添加到集合中,并將當前字符串添加到該組的答案中(因為這將是最后一次出現(xiàn))。

  • 最后,返回列表。


查看完整回答
反對 回復 2022-06-15
  • 3 回答
  • 0 關(guān)注
  • 86 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號