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这么简单 记录一下