求出list种最大的相同字母的最大数字

List list=new ArrayList<>();
list.add(“ABC001”);
list.add(“ABC002”);
list.add(“ABC003”);
list.add(“ACD001”);
list.add(“ACD002”);
需要求出来 最大的相同字母的最大数字 如 ABC003和ACD002

解答 1

  public static void main(String[] args) {
    
    
        final List<String> list = new ArrayList<>();
        list.add("ABC001");
        list.add("ABC002");
        list.add("ABC003");
        list.add("ACD001");
        list.add("ACD002");
 
        Demo01.groupMax(list).stream().forEach(System.out::println);
    }
 
    public static List<String> groupMax(List<String> list) {
    
    
        return Optional.ofNullable(list).orElse(Collections.emptyList()).stream()
                .collect(Collectors.groupingBy((k) -> k.replaceAll("\\d*$", ""),
                        Collectors.maxBy(
                                Comparator.comparingInt(k -> Integer.parseInt(k.replaceAll(".*?(\\d*)$", "$1"))))))
                .values().stream().map(k -> k.orElse("")).toList();
    }

解答2

public class Test {
    
    
    public static void main(String[] args) {
    
    
        List<String> list=new ArrayList<>();
        list.add("ABC001");
        list.add("ABC002");
        list.add("ABC003");
        list.add("ACD001");
        list.add("ACD002");
        Set<String> tmp=list.stream().map(s -> s.replaceAll("[^a-zA-Z]","")).collect(Collectors.toSet());
        Map<String,String> res=new HashMap<>();
        for (String s : list) {
    
    
            String key = s.replaceAll("[^a-zA-Z]", "");
            int tmpk = Integer.parseInt(s.replaceAll("[^0-9]",""));
            if (res.containsKey(key)){
    
    
                int max=Integer.parseInt(res.get(key));
                if(max<tmpk){
    
    
                    res.put(key, s.replaceAll("[^0-9]",""));
                }
            }else {
    
    
                res.put(key, s.replaceAll("[^0-9]",""));
            }
        }
        Set<String> result = new HashSet<>();
        for (String s : res.keySet()) {
    
    
            result.add(s + res.get(s));
        }
        System.out.println(result);
    }
}

解答3 最简单的一个 用的stream流

public class javaw {
    
    
    public static void main(String[] args) {
    
    
        List<String> list=new ArrayList<>();
        list.add("ABC001");
        list.add("ABC002");
        list.add("ABC003");
        list.add("ACD001");
        list.add("ACD002");
        Map<String, Optional<String>> collect = list.stream()
                .collect(Collectors.groupingBy(e -> e.replaceAll("[^a-zA-Z]",""), Collectors.maxBy(String::compareTo)));
        System.out.println(collect);
    }
}

解答4

List<String> list = new ArrayList<>();
list.add("ABC001");
list.add("ABC002");
list.add("ABC003");
list.add("ACD001");
list.add("ACD002");
Map<String, Integer> map = new HashMap<>();
for (String item : list) {
    
    
    String key = item.substring(0, 3);
    Integer value = Integer.valueOf(item.substring(3));
    if (map.getOrDefault(key, Integer.MIN_VALUE) < value) {
    
    
        map.put(key, value);
    }
}
System.out.println(map);

这是当时做的一个面试题 没想到用strem这么简单 记录一下

猜你喜欢

转载自blog.csdn.net/weixin_43686599/article/details/124010908
今日推荐