Это должно работать:
public static void main(String[] args) {
LinkedHashMap<String, String> map = new LinkedHashMap<>();
map.put("aa#bb", "11111#44-5555555");
map.put("bb#aa", "22222#ddd-222");
map.put("11#99", "00000#213-aaa");
Function<Map.Entry<String, String>, String> byVal1 =
entry -> entry.getKey().substring(0, entry.getKey().indexOf('#'));
Function<Map.Entry<String, String>, String> byVal2 =
entry -> entry.getKey().substring(entry.getKey().indexOf('#') + 1);
Function<Map.Entry<String, String>, String> byVal3 =
entry -> entry.getValue().substring(0, entry.getValue().indexOf('#'));
// Just change this value to sort by a different value
Function<Map.Entry<String, String>, String> value = byVal3;
List<Map.Entry<String, String>> asList = map.entrySet().stream().sorted(Comparator.comparing(value)).collect(Collectors.toList());
map.clear();
asList.forEach(entry -> map.put(entry.getKey(), entry.getValue()));
map.entrySet().stream().forEach(entry -> System.out.println(entry));
}
Вам, конечно, не нужно создавать byValX
функции в методе, и вместо этого вы можете использовать ссылки на методы.