[Ежедневный свежий гриб] Разные стили кодирования для разных людей

Микросервисы
[Ежедневный свежий гриб] Разные стили кодирования для разных людей

Мышление у всех разное, и код пишут разный.Наткнулся на простой пример на работе.Поделюсь с вами,какой у вас метод написания? Ответы приветствуются!

тема

(Игнорируя схему кэширования) Получить ожидаемую строку на основе идентификаторов и таблицы словаря OilDicVo:nameиспользовать/Строка интервалов.

параметр

List<String> ids = Lists.newArrayList("A001", "A002", "A004", "A007");
List<OilDicVo> oilDicVos = ...;

oilDicVosструктура

[
        {
            "oilsDicId": "A001",
            "name": "89#"
        },
        {
            "oilsDicId": "A002",
            "name": "92#"
        },
        {
            "oilsDicId": "A003",
            "name": "95#"
        },
        {
            "oilsDicId": "A004",
            "name": "98#"
        },
        {
            "oilsDicId": "A005",
            "name": "87#"
        },
        {
            "oilsDicId": "A006",
            "name": "86#"
        },
        {
            "oilsDicId": "A007",
            "name": "85#"
        },
        {
            "oilsDicId": "A008",
            "name": "84#"
        }
]

ожидаемая выходная строка

89#/92#/98#/85#

Версия V1.1

Версия V1.1.0

List<String> ids = ...;
List<OilDicVo> oilDicVos = ...;
StringBuilder stringBuilder = new StringBuilder();
for (String id : ids) {
	for (OilDicVo oilDicVo: oilDicVos) {
		if (ids.contains(oilDicVo.getOilsDicId())) {
			stringBuilder.append("/").append(oilDicVo.getName());
		}
	}
}
return stringBuilder.toString();

Версия V1.1.1

Увеличиватьbreak, пропустить внутренний цикл

List<String> ids = ...;
List<OilDicVo> oilDicVos = ...;
StringBuilder stringBuilder = new StringBuilder();
for (String id : ids) {
	for (OilDicVo oilDicVo: oilDicVos) {
		if (ids.contains(oilDicVo.getOilsDicId())) {
			stringBuilder.append("/").append(oilDicVo.getName());
			break;
		}
	}
}
return stringBuilder.toString();

Версия V1.2

Версия V1.2.0

Используйте карту вместо цикла.

List<String> ids = ...;
List<OilDicVo> oilDicVos = ...;
Map<String,String> map = new HashMap<>();
for (OilDicVo oilDicVo: oilDicVos) {
	map.put(oilDicVo.getOilsDicId(), oilDicVo.getName());
}
StringBuilder stringBuilder = new StringBuilder();
for (String id : ids) {
	stringBuilder.append("/").append(map.get(id));
}
return stringBuilder.toString();

Версия V1.2.1

Увеличьте начальный размер карты

List<String> ids = ...;
List<OilDicVo> oilDicVos = ...;
Map<String,String> map = new HashMap<>(oilDicVos.size());
for (OilDicVo oilDicVo: oilDicVos) {
	map.put(oilDicVo.getOilsDicId(), oilDicVo.getName());
}
StringBuilder stringBuilder = new StringBuilder();
for (String id : ids) {
	stringBuilder.append("/").append(map.get(id));
}
return stringBuilder.toString();

Версия V1.2.2

Уменьшить размер карты

List<String> ids = ...;
List<OilDicVo> oilDicVos = ...;
Map<String,String> map = new HashMap<>(ids.size());
for (OilDicVo oilDicVo: oilDicVos) {
	if (ids.contains(oilDicVo.getOilsDicId())) {
		map.put(oilDicVo.getOilsDicId(), oilDicVo.getName());
	}
}
StringBuilder stringBuilder = new StringBuilder();
for (String id : ids) {
	stringBuilder.append("/").append(map.get(id));
}
return stringBuilder.toString();

Версия V1.2.3

Цикл напрямую с использованием значений карты.

List<String> ids = ...;
List<OilDicVo> oilDicVos = ...;
Map<String,String> map = new HashMap<>(ids.size());
for (OilDicVo oilDicVo: oilDicVos) {
	if (ids.contains(oilDicVo.getOilsDicId())) {
		map.put(oilDicVo.getOilsDicId(), oilDicVo.getName());
	}
}
StringBuilder stringBuilder = new StringBuilder();
for (String name : map.values()) {
	stringBuilder.append("/").append(name);
}
return stringBuilder.toString();

Версия V1.3

Используйте лямбда-выражения

Версия V1.3.0

Преобразование непосредственно в карту с использованием лямбда-выражения

List<String> ids = ...;
List<OilDicVo> oilDicVos = ...;
Map<String,String> map = oilDicVos.stream()
	.collect(Collectors.toMap(OilDicVo::getOilsDicId, OilDicVo::getName))
StringBuilder stringBuilder = new StringBuilder();
for (String id : ids) {
	stringBuilder.append("/").append(map.get(id));
}
return stringBuilder.toString();

Версия V1.3.1

После фильтрации доступных результатов с помощью лямбда-выражения преобразуйте их в карту

List<String> ids = ...;
List<OilDicVo> oilDicVos = ...;
Map<String,String> map = oilDicVos.stream()
	.filter(oilDicVo -> strings.contains(oilDicVo.getOilsDicId()))
	.collect(Collectors.toMap(OilDicVo::getOilsDicId, OilDicVo::getName))
StringBuilder stringBuilder = new StringBuilder();
for (String name : map.values()) {
	stringBuilder.append("/").append(name);
}
return stringBuilder.toString();

Версия V1.3.2

После использования лямбда-выражения для фильтрации доступных результатов после преобразования в карту напрямую присоединяйтесь к значению значения.

List<String> ids = ...;
List<OilDicVo> oilDicVos = ...;
Map<String,String> map = oilDicVos.stream()
	.filter(oilDicVo -> strings.contains(oilDicVo.getOilsDicId()))
	.collect(Collectors.toMap(OilDicVo::getOilsDicId, OilDicVo::getName))
return map.values().stream().collect(Collectors.joining("/"));;

Версия V1.3.3

Однократное преобразование с использованием лямбда

List<String> ids = ...;
List<OilDicVo> oilDicVos = ...;
return oilDicVos.stream()
    .filter(oilDicVo -> strings.contains(oilDicVo.getOilsDicId()))
    .map(OilDicVo::getName)
    .collect(Collectors.joining("/"));

Суммировать

В этом же проекте встречающийся код этих похожих функций, вероятно, является одной из версий. Какой ты предпочитаешь? У кого хуже производительность? Что более производительно?