跪求大神如何用java8写出优雅的if区间判断,在线等各路大神求解

不会开发的码农 2021-06-10 11:34:33

需求是这样的:

0.12-0.35 为 持有

0.36-0.45 为 拥有

0.46-0.65 为已拥有

0.65以上 为绝对拥有

现在需要判断一个list ,list里面的一个对象的属性为 partners 来判断,然后把判断的值写回到list的对象的属性为 desc中

例如:partners =0.13  然后处理完之后 List中的这个对象应该是:

{

    partners :0.13,

    desc:持有

}

急在线等各路大神求解

...全文
1446 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
老王就是我 2021-06-15
  • 打赏
  • 举报
回复

举个简单的例子吧

@Component
public interface Parent{
    //最小数
    double minDouble;
    //最大数
    double MaxDouble;

    String boolHave(double dd);
}

@Component
public class Chiyou implement Parent{
    //最小数
    double minDouble=2;
    //最大数
    double maxDouble=3;
    
    public String boolHave(double dd){
        if(minDouble<dd<maxDouble){
            return "持有";
        }
        return null;
    }
}

@Component
public class Yongyou implement Parent{
    //最小数
    double minDouble=4;
    //最大数
    double maxDouble=5;
    
    public String boolHave(double dd){
        if(minDouble<dd<maxDouble){
            return "持有";
        }
        return null;
    }
}
....

public class TestController{
    
    @autowaird
    private Parent[] parents;
    
    public void test(){
        for(Parent parent: aprents){
            String str=parent.boolHave(dd);
            if(str!=null){
                System.out.println(str);
            }
        }
    }
    
}

大概思路是:

策略模式,弄个父类接口,然后根据不同判断类型写成不同的子类实现对比方法,然后再想办法加载所有的子类,最后递归所有子类,看是否返回非null,最后输出

HHeyJ 2021-06-11
  • 打赏
  • 举报
回复 2

为什么要回写,你把desc属性的Get方法重写一下不就行了吗?

private Double partners;

private String desc;

public String getDesc() {
    if (StringUtils.isNotBlank(desc)) {
        return desc;
    }
    desc = partners < 0.12 ? null : partners < 0.36 ? "持有" : partners < 0.46 ? "拥有" : partners < 0.66 ? "已拥有" : "绝对拥有";
    return desc;
}

 

HHeyJ 2021-06-11
  • 举报
回复
@HHeyJ 也可以在partners属性Set方法的时候把desc就给赋值了
  • 举报
回复
@HHeyJ 当这个desc是很长得一段文字得话,或者判断复杂的话不好管理
老王就是我 2021-06-15
  • 举报
回复
@HHeyJ 你这压根不优雅,甚至有毒。你是不是想成为公司的顶梁柱
5条回复
爱写Bug的麦洛 2021-06-10
  • 打赏
  • 举报
回复

怎么感觉优雅不起来,只能用最笨的方法了

chenfangya_93 2021-06-10
  • 打赏
  • 举报
回复
@Test
	public void test1() {
		A a1 = new A(0.13d, null);
		A a2 = new A(0.37d, null);
		A a3 = new A(0.47d, null);
		A a4 = new A(0.67d, null);
		List<A> list = Lists.newArrayList(a1, a2, a3, a4);
		
		Function<A, A> f1 = A::m2;
		Function<A, A> f2 = f1.andThen(A :: m);
		list.forEach(v -> f2.apply(v));
		System.out.println(list);
	}
	
	@Setter
	@Getter
	@ToString
	@AllArgsConstructor
	@NoArgsConstructor
	static class A {
		private Double partners;
		private String desc;
		
		public static A m(A a){
			Double d = a.getPartners();
			if (Objects.isNull(d)) {
				a.setDesc("");
			}
			if (m1(d, 0.12D, 0.35D)) {
				a.setDesc("1");
			}
			if (m1(d, 0.36D, 0.45D)) {
				a.setDesc("2");
			}
			if (m1(d, 0.46D, 0.65D)) {
				a.setDesc("3");
			}
			if (d.compareTo(0.65D) > 0) {
				a.setDesc("4");
			}
			return a;
		}
		
		public static boolean m1(Double current, Double min, Double max) {
			return Math.max(min, current) == Math.min(current, max);  
		}
		
		public static A m2(A a) {
			return a;
		}
	}

感觉一点都不简洁 ....

  • 举报
回复
@chenfangya_93 那要是使用其他的方式会有简洁吗?

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧