想让逻辑Java8兼容更高效
Want to make the logic Java8 Compatible and More Efficient
我写了一个 Logic,它对 Hashmap 和 returns String 进行一些计算。
我想通过使用 Java8 功能和 Apache Commons 功能以更有效的方式编写它。
逻辑没有任何问题,但不够清晰和可读。
public String giveMeTheRightOrder(CustomObject customObject) {
String order = null;
Map<ArticleType , ArticleStatus > objMap = customObject.getArticles();
boolean isArticleClothing = false;
boolean isArticleFoodItem = false;
if(objMap != null && objMap.size() == 2) {
for(ArticleType articleType : objMap.keySet()) {
if(articleType.toString().equalsIgnoreCase(ArticleType.CLOTH.toString())) {
isArticleClothing = true;
}
if(articleType.toString().equalsIgnoreCase(ArticleType.FOOD.toString())) {
isArticleFoodItem = true;
}
}
if(isArticleClothing && isArticleFoodItem ){
int liveCount = 0;
for(ArticleStatus articleStatus : objMap.values() ) {
if(articleStatus.toString().equalsIgnoreCase(ArticleStatus.LIVE.toString() )) {
liveCount++;
}
}
if(liveCount != 2 )
{
for(Map.Entry<ArticleType , ArticleStatus> entry : objMap.entrySet()) {
if(entry.getValue().toString().equalsIgnoreCase(ArticleStatus.LIVE.toString()) {
order = entry.getKey().toString();
break;
}
}
} else {
order = ArticleType.CLOTH.tostring();
}
} else {
order = "COMPLETE";
}
}
for(Map.Entry<ArticleType, ArticleStatus> entry : objMap.entrySet() ) {
if(entry.getValue().toString().equalsIgnoreCase(ArticleStatus.LIVE.toString())){
order = entry.getKey().toString();
break;
}
else{
order = "COMPLETE";
}
}
return order;
}
根据您的代码:
如果地图有两个键(ArticleType.CLOTH
和 ArticleType.FOOD
),那么您计算地图中的 LIVE
值。然后如果 countLive
数量不是 2,你已经遍历地图并找到第一个键,它的值为 LIVE
另一方面你设置了 CLOTH
我认为它不需要。
如果地图大小为 2,您可以这样做:如果两个键都是 LIVE
,则 return ArticleType.CLOTH
if (objMap != null && objMap.size() == 2) {
if (ArticleStatus.LIVE.equals(objMap.get(ArticleType.CLOTH)) &&
ArticleStatus.LIVE.equals(objMap.get(ArticleType.FOOD))) {
return ArticleType.CLOTH.toString();
}
}
对于其他情况,您可以这样做:
return objMap.entrySet().stream()
.filter(entry -> entry.getValue().toString()
.equalsIgnoreCase(ArticleStatus.LIVE.toString()))
.findFirst().map(entry -> entry.getKey().toString()).orElse("COMPLETE");
完整代码如下:
public String giveMeTheRightOrder(CustomObject customObject) {
Map<ArticleType, ArticleStatus> objMap = customObject.getArticles();
if(objMap == null) return "COMPLETE";
if (objMap.size() == 2) {
if (ArticleStatus.LIVE.equals(objMap.get(ArticleType.CLOTH)) &&
ArticleStatus.LIVE.equals(objMap.get(ArticleType.FOOD))) {
return ArticleType.CLOTH.toString();
}
}
return objMap.entrySet().stream()
.filter(entry -> entry.getValue().toString()
.equalsIgnoreCase(ArticleStatus.LIVE.toString()))
.findFirst()
.map(entry -> entry.getKey().toString()).orElse("COMPLETE");
}
我写了一个 Logic,它对 Hashmap 和 returns String 进行一些计算。 我想通过使用 Java8 功能和 Apache Commons 功能以更有效的方式编写它。 逻辑没有任何问题,但不够清晰和可读。
public String giveMeTheRightOrder(CustomObject customObject) {
String order = null;
Map<ArticleType , ArticleStatus > objMap = customObject.getArticles();
boolean isArticleClothing = false;
boolean isArticleFoodItem = false;
if(objMap != null && objMap.size() == 2) {
for(ArticleType articleType : objMap.keySet()) {
if(articleType.toString().equalsIgnoreCase(ArticleType.CLOTH.toString())) {
isArticleClothing = true;
}
if(articleType.toString().equalsIgnoreCase(ArticleType.FOOD.toString())) {
isArticleFoodItem = true;
}
}
if(isArticleClothing && isArticleFoodItem ){
int liveCount = 0;
for(ArticleStatus articleStatus : objMap.values() ) {
if(articleStatus.toString().equalsIgnoreCase(ArticleStatus.LIVE.toString() )) {
liveCount++;
}
}
if(liveCount != 2 )
{
for(Map.Entry<ArticleType , ArticleStatus> entry : objMap.entrySet()) {
if(entry.getValue().toString().equalsIgnoreCase(ArticleStatus.LIVE.toString()) {
order = entry.getKey().toString();
break;
}
}
} else {
order = ArticleType.CLOTH.tostring();
}
} else {
order = "COMPLETE";
}
}
for(Map.Entry<ArticleType, ArticleStatus> entry : objMap.entrySet() ) {
if(entry.getValue().toString().equalsIgnoreCase(ArticleStatus.LIVE.toString())){
order = entry.getKey().toString();
break;
}
else{
order = "COMPLETE";
}
}
return order;
}
根据您的代码:
如果地图有两个键(ArticleType.CLOTH
和 ArticleType.FOOD
),那么您计算地图中的 LIVE
值。然后如果 countLive
数量不是 2,你已经遍历地图并找到第一个键,它的值为 LIVE
另一方面你设置了 CLOTH
我认为它不需要。
如果地图大小为 2,您可以这样做:如果两个键都是 LIVE
,则 return ArticleType.CLOTH
if (objMap != null && objMap.size() == 2) {
if (ArticleStatus.LIVE.equals(objMap.get(ArticleType.CLOTH)) &&
ArticleStatus.LIVE.equals(objMap.get(ArticleType.FOOD))) {
return ArticleType.CLOTH.toString();
}
}
对于其他情况,您可以这样做:
return objMap.entrySet().stream()
.filter(entry -> entry.getValue().toString()
.equalsIgnoreCase(ArticleStatus.LIVE.toString()))
.findFirst().map(entry -> entry.getKey().toString()).orElse("COMPLETE");
完整代码如下:
public String giveMeTheRightOrder(CustomObject customObject) {
Map<ArticleType, ArticleStatus> objMap = customObject.getArticles();
if(objMap == null) return "COMPLETE";
if (objMap.size() == 2) {
if (ArticleStatus.LIVE.equals(objMap.get(ArticleType.CLOTH)) &&
ArticleStatus.LIVE.equals(objMap.get(ArticleType.FOOD))) {
return ArticleType.CLOTH.toString();
}
}
return objMap.entrySet().stream()
.filter(entry -> entry.getValue().toString()
.equalsIgnoreCase(ArticleStatus.LIVE.toString()))
.findFirst()
.map(entry -> entry.getKey().toString()).orElse("COMPLETE");
}